Есть проблема. Приложение собранное в VC2005 (без среды - nmake) не запускается под XP SP2. Проблема решается копированием в каталог приложения .manifest файла получаемого автоматом при линковке. Собственно тоже приложение собранное под VC6.0 запускается безо всяких .manifest. Следовательно, где-то в .exe записано что надо проверять .manifest. Как бы это отключить? Или это запсано непосредственно в MSVCR80.dll?
/NOASSEMBLY не работает для .exe
/clr:noAssembly у исходников тоже не помогает
можно конечно попытаться встроить манифест в .exe с помощью mt, но на фига такие сложности? может где-то в имадже можно это убрать?
отлично... только у меня проект собирается не средой, а через nmake. В MSDN описан некий способ (http://msdn2.microsoft.com/en-US/library/ms235591.aspx) встроить манифест с помощью mt.exe, но насколько стал сложней make-файл! Неужели нельзя вообще без манифестов?
> отлично... только у меня проект собирается не средой, а > через nmake. В MSDN описан некий способ > (http://msdn2.microsoft.com/en-US/library/ms235591.aspx) > встроить манифест с помощью mt.exe, но насколько стал > сложней make-файл! Неужели нельзя вообще без манифестов?
Обычно принято иметь хотябы versioninfo. Чтобы эмбеднуть манифест в exe-шник, достаточно просто указать его в ресурсах. Тип ресурса RT_MANIFEST (24), номер ресурса - разный в зависимости от того, что собираешь. Чаще всего - 0.
по идее признак проверки манифестов стоит именно в образе .exe, поскольку:
1) существуют старые .exe которые ничего о манифестах не знают и XP должен их запускать
2) манифест содержит указание на зависимость от mscrt80.dll, и было бы странно если бы признак проверки манифеста был бы в runtime dll-ях
Выше я неправильно написал. установка Embed Manifest в No не...13.11.06 12:44 Автор: makeworld Статус: Member Отредактировано 13.11.06 12:45 Количество правок: 1
Выше я неправильно написал. установка Embed Manifest в No не отключает манифест, а генерирует его как отдельный файл и кладет рядом с экзешником в папку release/debug. Соотвественно при сборке и запуске из IDE все проблемы снимаются.
судя по этому в VC 8 без манифеста не обойтись:
"Visual C++ libraries cannot be used by a C/C++ application without a manifest binding the application to these libraries. If a C/C++ application that depends on a Visual C++ library does not use a manifest, then an attempt to load the Visual C++ library as a dependent DLL from the application-local folder will result in an error message indicating that this is an unsupported way of loading a Visual C++ library."
может проще тогда эти действия в Makefile автоматизировать:
>Проблема решается копированием в каталог приложения
>.manifest файла получаемого автоматом при линковке.