188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670

Правильное создание релизной версии проекта в Visual Studio

04.05.2013, 09:48. Показов 106358. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Салют!
Уже долгое время бьюсь над проблемой, когда созданный на одном компьютере проект не работает на другом. Все длл я собрал в папку с программой, но дело в том, что эти самые длл ищутся сначала в системных папках, и, если там найдена таковая, используют ее. А версии длл'ек часто различаются. Нет ли способа каким-либо образом вручную указать, какие именно длл и откуда их необходимо проверять в первую очередь?
В частности, с переносом с win7 на win7 вроде разобрался (в настройках режим \MT поставил, и на парочке проверенных это работает), но вот при попытке запустить на XP уже возникают проблемы (хотя это как раз таки самый актуальный вопрос)...

P.s.
1. Хотелось бы обойтись без установки redist на этом компе;

2. Недавно встретил такую программу, как ILMerge, для сборки exe и всех длл'ек в один файл, но походу она конкретно в этом случае не подходит (проверено). Может, есть какие-либо аналоги именно для программы, написанной на VS?

Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2013, 09:48
Ответы с готовыми решениями:

Открытие проекта в более старой версии Visual Studio
Народ, помогите пожалуйста. Делал проект в VS 2012 и не могу открыть его в 2010. Как бы решить эту проблему?

Visual Studio 2010 (создание проекта)
Кто пользовался Microsoft Visual Studio 2010??? Кто там создавал MFC Application? У меня такая проблема, начинаю создавать, меня...

Visual studio 2013 и создание проекта
При попытке создать новый образ на языке си (консольное окно) visual выдает ошибку типа "невозможно вычислить выражение" и там...

13
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
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 для этой системы, в данном случае шестая):
C
1
2
3
4
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#define _WIN32_WINDOWS 0x0501
#define _WIN32_IE 0x0600
Этот код должен быть включен до любых директив #include. Обычно его выносят в один общий
заголовок с соответствующим названием, например 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
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
07.05.2013, 19:14  [ТС]
спасибо за ответ.
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
07.05.2013, 19:47
Если проект пишется на С++ в консоли, то Свойства проекта -> Общие -> Использование MFC -> Использовать MFC в статической библиотеке. Построить проект. Должно работать, я всегда так делаю.
2
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
07.05.2013, 21:52  [ТС]
Дык а причем там MFC то? Я ж его не использую... или я чего-то не понимаю?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
08.05.2013, 20:35
В этом вся и фишка. Почему-то так работает ... Попробуйте и скажите, получится ли у Вас так.
0
 Аватар для DELAKEY
6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
06.07.2014, 21:22
Убежденный, ключ /MT это тут?
если я тут его выбераю то появляется
Code
1
Ошибка    1   error D8016: несовместимые параметры командной строки "/clr" и "/MT"  C:\Users\User\documents\visual studio 2013\Projects\LcBotCLR\LcBotCLR\cl    LcBotCLR
Проект с использованием CLR, как исправить не могу ума приложить
Миниатюры
Правильное создание релизной версии проекта в Visual Studio  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
06.07.2014, 22:38
Цитата Сообщение от DELAKEY Посмотреть сообщение
Проект с использованием CLR, как исправить не могу ума приложить
CLR и C++/CLI - это уже не C++ и рекомендации, данные выше, для него не применимы.
1
6 / 6 / 0
Регистрация: 31.05.2015
Сообщений: 59
02.12.2015, 09:41
mat_for_c,
Если проект пишется на С++ в консоли, то Свойства проекта -> Общие -> Использование MFC -> Использовать MFC в статической библиотеке. Построить проект. Должно работать, я всегда так делаю.
Подтверждаю, работает! Под VSC++ проект вынь32 консоль
0
 Аватар для Zeysithi
0 / 0 / 0
Регистрация: 09.05.2016
Сообщений: 5
10.05.2016, 01:42
ОЧень полезная тема, спасибо)
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
19.06.2016, 14:53
Цитата Сообщение от mat_for_c Посмотреть сообщение
Если проект пишется на С++ в консоли, то Свойства проекта -> Общие -> Использование MFC -> Использовать MFC в статической библиотеке. Построить проект. Должно работать, я всегда так делаю.
А если проект Вин Апи 32 визуальный , то что нужно изменять в настройках - что-бы проект запускался на компах где не стоит вижуал 10
0
6 / 6 / 0
Регистрация: 31.05.2015
Сообщений: 59
19.06.2016, 18:37
Все то же самое. Это работает для любых нативных проектов будь то вынь32 или мфк.
Вобще это не работает только для управляемых проектов, т.е. для C++ CLI
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
20.06.2016, 11:35
Цитата Сообщение от sammanta Посмотреть сообщение
Все то же самое.

для визуальных вин апи это не подходит. если поставить статику - то получите шыш в компиляции
0
0 / 0 / 0
Регистрация: 13.10.2018
Сообщений: 15
02.02.2020, 15:15
Я совсем недавно начал программировать, и у меня возникла такая же проблема. Но я обычно пишу в эклипсе, не знаю где там настройка Использование MFC. Подскажите где ее найти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2020, 15:15
Помогаю со студенческими работами здесь

Создание нового проекта в Visual Studio
Не знаю в какую ветку разместить. Помню, когда учился, мы работали в Visual Studio и я создавал новые проекты. Потом программировал в...

Создание UML проекта на Visual Studio 2010
Здраствуйте, возникла проблема при создание UML проекта в Визуал студио, а именно отсуствием шаблона для моделирование! я о шаблоне со...

Создание шаблона проекта visual studio 2005
Здравствуйте. Необходимо создать шаблон консольного проекта, т.е. например, чтобы при создании проекта у меня в проекте был файл main.cpp...

Создание проекта в Visual Studio Express 2010
У меня такая проблема:Нужно написать прогу на С++ . Обьясните как это сделать в VS если мне всякие проекты не нужны нужно только...

Создание проекта InstallShield Limited Edition в Visual Studio
Всем доброго времени суток! Во время проекта выдает такие ошибки ISEXP : warning -6245: One or more of the project's components...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru