Как определить, является ли устанавливаемое приложение 32-разрядным или 64-разрядным? - PullRequest
0 голосов
/ 07 декабря 2009

Я хочу, чтобы можно было предсказать место установки приложения по умолчанию. На 64-разрядном компьютере, если это 32-разрядное приложение, оно устанавливается в «Program Files (x86)», а если это 64-разрядное приложение, оно устанавливается в «Program Files».

Моя цель - установить приложение с местоположением по умолчанию и проверить правильность установки. Но для этого мне нужно знать, где он будет установлен. Если я знаю, для какой архитектуры построено приложение, я думаю, что оно послужит моей цели.

Ответы [ 2 ]

1 голос
/ 14 февраля 2014

Если вы можете использовать внешние инструменты, то GNU file является наиболее универсальным решением. Но это может быть немного излишним для этой цели. Другими альтернативами являются Зависимый ходок , Sysinternals ' Sigcheck , свалка или корфляги MSVC ... Но тот, который может удивить многих людей, это 7zip . Он имеет небольшую file -подобную утилиту внутри, которую можно использовать с l option

C:\>7z l "C:\Program Files (x86)\Windows Photo Viewer\ImagingDevices.exe" | findstr CPU
CPU = x86

C:\>7z l "C:\Program Files\Windows Photo Viewer\ImagingDevices.exe" | findstr CPU
CPU = x64

Если вам нужно проверить это самостоятельно, прочитайте 2 байта со смещением 0x3C в файле. Затем добавьте 4 к этому значению и прочитайте 2 байта с этим смещением, что будет указывать архитектуру. Например, в приведенном ниже примере файл содержит 0x00E0 со смещением 0x3C. По смещению 0x00E0 + 4 = 0x00E4 содержит 0x8664 , что означает 64-разрядный двоичный файл. Если это был 32-разрядный двоичный файл x86, он будет содержать 0x014C

PE file opened as text

Есть и другие способы, которые вы можете найти в ссылках ниже. Для этой цели также доступны другие сценарии PowerShell и VBS

1 голос
/ 07 декабря 2009

Скачать file для Windows, чтобы проверить детали любого файла в Windows:

http://gnuwin32.sourceforge.net/packages/file.htm

Затем через командную строку Windows:

C:\> "C:\Program Files\GnuWin32\bin\file" name-of-file.exe
name-of-file.exe executable for MS Windows (GUI) Intel 80386 32-bit

Вы должны иметь возможность получить возвращаемое значение этой команды с любой платформы разработки, с которой вы работаете.

...