188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
Правильное создание релизной версии проекта в Visual Studio04.05.2013, 09:48. Показов 99900. Ответов 16
Метки нет Все метки)
(
Салют!
Уже долгое время бьюсь над проблемой, когда созданный на одном компьютере проект не работает на другом. Все длл я собрал в папку с программой, но дело в том, что эти самые длл ищутся сначала в системных папках, и, если там найдена таковая, используют ее. А версии длл'ек часто различаются. Нет ли способа каким-либо образом вручную указать, какие именно длл и откуда их необходимо проверять в первую очередь? В частности, с переносом с win7 на win7 вроде разобрался (в настройках режим \MT поставил, и на парочке проверенных это работает), но вот при попытке запустить на XP уже возникают проблемы (хотя это как раз таки самый актуальный вопрос)... P.s. 1. Хотелось бы обойтись без установки redist на этом компе; 2. Недавно встретил такую программу, как ILMerge, для сборки exe и всех длл'ек в один файл, но походу она конкретно в этом случае не подходит (проверено). Может, есть какие-либо аналоги именно для программы, написанной на VS? Спасибо.
0
|
04.05.2013, 09:48 | |
Ответы с готовыми решениями:
16
Открытие проекта в более старой версии Visual Studio Visual Studio 2010 (создание проекта) Visual studio 2013 и создание проекта |
Ушел с форума
![]() ![]() |
||||||
04.05.2013, 10:46 | ||||||
![]() Решение
Первое, в чем необходимо убедиться - что программа не использует функции, которые могут
отсутствовать на целевых версиях Windows. Например, InitializeCriticalSectionEx поддерживается, начиная с Windows Vista, а CreateFile2 вообще есть только на Windows 8 и Windows Server 2012. Один из способов достичь этого - задавать целевые версии самому, через макроопределения. Следующий фрагмент разрешает включать из стандартных заголовков SDK только те объявления, которые имеют смысл для Windows XP (0x0501 - это номер версии NT для Windows XP (5.1), а 0x0600 - это версия Internet Explorer для этой системы, в данном случае шестая):
заголовок с соответствующим названием, например targetver.h (target version). Теперь при попытке использовать функцию, доступную только на более новых, чем Windows XP, системах, будет выдана ошибка компиляции. Это не панацея, но решение 90% проблем данного класса. Хотя некоторые все равно останутся. Например exe, собранный в Visual C++ 2010, имеет зависимость от функций EncodePointer и DecodePointer, и поэтому не запустится на Windows Server 2003 RTM (который без R2 и без сервис-пака), так как на данной системе эти функции отсутствуют. А вот Visual C++ 2008 такой проблемы не имел. Бывает, что программе, если она запускается на новых системах, нужны некоторые новые функции, в этом случае следует определять номер версии Windows (GetVersionEx) и загружать необходимые dll динамически - LoadLibrary/GetProcAddress. При этом следует учитывать, что программа может быть запущена в режиме совместимости. Второе - проверить, что программа не имеет зависимостей от dll, которые могут отсутствовать на целевых системах. Распостраненный случай - отсутствие нужной версии Visual C++ Runtime. В Visual C++ 2008 рантайм был сделан как SxS-сборки и его нужно было либо включать в инстяллятор программы, как Merge Module или vcredist.exe, либо делать в каталоге с установленной программой дополнительную подпапку со специальным именем и помещать сборку туда. В Visual C++ 2010 решение проблемы упростили и рантайм (msvcr100.dll/msvcp100.dll) теперь подключается, как обычная dll, без манифестов и прочих сложностей. Хотя вы можете по-прежнему включать в инсталлятор программы Visual C++ 2010 Redistributable, он просто скопирует файлы рантайма в папку Windows\system32. Ключ /MT компилятора тоже может помочь, в этом случае рантайм подключается статически и зависимостей от msvcr100.dll/msvcp100.dll не будет. Хотя данный способ не всегда возможен. Если проблема остается, можно воспользоваться утилитой Dependency Walker: http://www.dependencywalker.com/ Запускайте ее на проблемной системе и смотрите, каких dll не хватает. Еще находить проблемы совместимости очень помогает использование виртуальных машин. Можно сделать себе целый "зоопарк" разных виртуальных систем и конфигураций и перед каждым релизом софта тестировать его на этих системах.
34
|
![]() 6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
|
||||||
06.07.2014, 21:22 | ||||||
Убежденный, ключ /MT это тут?
если я тут его выбераю то появляется
0
|
Ушел с форума
![]() ![]() |
|
06.07.2014, 22:38 | |
CLR и C++/CLI - это уже не C++ и рекомендации, данные выше, для него не применимы.
1
|
Ушел с форума
![]() ![]() |
|
30.04.2017, 19:28 | |
Информативненько.
0
|
Заблокирован
|
|
30.04.2017, 21:32 | |
![]() аща. меня к Вам направили Exe файл не работает Добавлено через 17 секунд оперативненько Добавлено через 3 минуты что нужно почитать про создание готовых кроссплатформенных релизов из СИ? Добавлено через 1 час 57 минут ответ https://www.youtube.com/watch?v=JBPqQRxo16E Добавлено через 1 минуту находим кросс тулс от визуал студио в нем есть утилита cl применяем cl к главному файлу проекта. если ругается на то что не моет найти хедеры и прочие, перемещаем все в одну папку и пишем cl нашеимяфайламейн.cpp на выходе получем екзе и обджект
0
|
0 / 0 / 0
Регистрация: 13.10.2018
Сообщений: 15
|
|
02.02.2020, 15:15 | |
Я совсем недавно начал программировать, и у меня возникла такая же проблема. Но я обычно пишу в эклипсе, не знаю где там настройка Использование MFC. Подскажите где ее найти.
0
|
02.02.2020, 15:15 | |
Помогаю со студенческими работами здесь
17
Создание нового проекта в Visual Studio Создание UML проекта на Visual Studio 2010 Создание шаблона проекта visual studio 2005 Создание проекта в Visual Studio Express 2010 Создание проекта InstallShield Limited Edition в Visual Studio Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
|
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
|
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
|
Изменяемые и неизменяемые типы в Python
py-thonny 19.04.2025
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является. . .
|
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
|
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
|
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
|
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
|
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
|
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
|