Невозможно запустить исполняемый файл, встроенный в VS2008, в чистую систему
Я недавно столкнулся с этой проблемой. У меня был простой консольный проект в Visual Studio 2008, который я построил в режиме релиза и выпустил его.
Мы обнаружили, что на чистой машине windows xp sp3 исполняемый файл при двойном щелчке не запускается, и выдается сообщение об ошибке, в котором говорится, что "Конфигурация неверна". Мы исправили проблему, установив в систему повторно распространяемый пакет VS 2008. Мой вопрос:
1- Почему это произошло? Это произошло не на всех компьютерах XP, но некоторые из них. Совершенно невероятно, что файлы, необходимые для запуска простой программы win32, не присутствовали по умолчанию в Windows XP SP3. Как это тогда, что notepad.exe и другие программы, где работает? Одна возможность, которую я рассмотрел, может заключаться в том, что файлы времени выполнения, представленные в ОС, были старше и exe-манифест ссылался на более новую версию файлов. Но мне интересно, так ли это, так как сама VS2008 довольно старая. Дайте мне знать, что вы думаете.
2- Так как мне приходится запускать exe на многих машинах, я рассматривал способ статически связать все необходимые библиотеки с помощью программы win32 в VS 2008. Я знаю о ключе /MT в параметрах компоновщика, но был интересно, позаботится ли он обо всех библиотеках времени выполнения (библиотеках C++ и других библиотеках Windows).
Благодарю.
2 ответа
Это произошло потому, что распространяемые файлы VS2008 не установлены вместе с Windows. Они должны быть установлены другим приложением, а это значит, что они не будут присутствовать при первоначальной установке Windows. Но они, вероятно, присутствуют на машинах, на которых установлено несколько приложений, так как многие приложения Windows используют их. Родные приложения Windows, такие как Блокнот, не зависят от них, поэтому неудивительно, что Блокнот работает без них.
Как уже указывало typ1232, опция /MT решит вашу проблему (за счет увеличения размеров EXE и DLL). Библиотеки для собственных API-интерфейсов Windows гарантированно присутствуют, если они специально не задокументированы как опция, которую вы должны установить отдельно, поэтому вам не нужно беспокоиться о них.
Как вы теперь обнаружили, тестирование приложений с использованием режима выпуска, основанного на первичных установках Windows, - это важный шаг в тестировании любого приложения Windows.
Параметр /MT приводит к статической связи библиотеки времени выполнения, поэтому динамические библиотеки не обязательно должны присутствовать в целевой системе.
Альтернатива состоит в том, чтобы упаковать установщик Redist в ваш установщик.