Мне пришлось написать простое приложение с некоторыми конкретными требованиями:
1. Он должен состоять только из одного exe-файла, без установщика или внешней библиотеки DLL
2. Он должен быть маленьким
3. Он должен работать на любой платформе Windows (Win32) (по крайней мере, в Windows XP), без внесения каких-либо изменений в установку Windows (без зависимостей от распространяемых пакетов .NET, JVM, MFC или Visual Studio)
4. Должен иметь простой (основанный на диалоге) пользовательский интерфейс
Я решил сделать это как простое Win32-приложение на C (C ++) и использовать только стандартный Win32 API, ничего особенного. Я создал проект с Visual Studio 2010 на 64-битной Windows 7 и изменил Runtime Library с многопоточной DLL на просто многопоточную. Я думал, что это создаст самое совместимое с Windows приложение.
Скомпилированное приложение отлично работает на моем Windows 7, но я не могу запустить его на любом ПК с Windows XP. Я пробовал как на Windows XP SP2 и SP3. Странно то, что я не получаю никаких сообщений об ошибках и никаких мошеннических процессов в Диспетчере активности, ничего не происходит, когда я дважды щелкаю exe-файл. И журнал DrWatson не создается.
Я проверил целевой компьютер в настройках проекта, и это MachineX86.
Я много гуглил по этой проблеме, и одним из советов было изменить targetver.h, что я сделал безрезультатно. Вот как сейчас выглядит мой targetver.h:
#include <WinSDKVer.h>
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>
Я также пробовал обходчик зависимостей, но он показывает только ошибку загруженной с задержкой DLL, называемой DWMAPI.DLL, которая, похоже, является Vista DLL. А также предупреждения для двух других загруженных с задержкой библиотек DLL, MPR.DLL и SHLWAPI.DLL. Но так как они загружаются с задержкой, и я не думаю, что я использую в них что-либо, это не должно иметь значения (поиск в Google показывает, что эти предупреждения следует игнорировать).
Моя цель - собрать exe-файл, который будет работать на XP-машинах, не внося в них никаких изменений.