Марк Руссинович из компании SysInternals описывает свой метод здесь . Они встраивают образ x64 в образ x86. К сожалению, вышеупомянутая запись в блоге на самом деле не содержит слишком много деталей, но упоминает, что их метод основан на гораздо более старой статье, найденной здесь .
Похоже, что это уже было рассмотрено (хотя подробности здесь довольно поверхностные) в ...
Свернуть 64-битную и 32-битную версии приложения в один и тот же двоичный файл?
Не инструмент, но кажется довольно простым встроить ваши исполняемые файлы в проект VC ++ в качестве ресурсов и запустить правильный после проверки среды ОС.
Используйте функцию IsWow64Process для обнаружения 32 или 64 бит, и вот хорошая запись, включая исходный код о том, как встраивать исполняемые файлы: http://www.codeproject.com/KB/winsdk/binaryresources.aspx .
Хотя это возможно, я считаю это плохой практикой, поскольку большинство этих приложений (например, Process Explorer) извлекают этот файл в рабочий каталог. Если вам нравится помещать программы в папку «Program Files», это противоречит тому, что этот каталог доступен только для чтения.
Мне кажется проще разделить две программы и сделать ярлык только для файла x86. Если эта версия обнаруживает 64-битную версию, ей просто нужно запустить файл x64.
Если у вас есть действительно веская причина для объединения этих двух, то встраивание его в качестве ресурса кажется правильным путем.