Разрядность исполняемого файла чаще всего нужна, когда программа не запускается, отказывается подключать библиотеку или её нужно развернуть на сервере с конкретной архитектурой. Быстрый ориентир: если файл лежит в папке Program Files (x86), он почти наверняка 32-битный, а в Program Files — 64-битный. Но это работает только для установленных программ, а скачанный или перенесённый EXE так не проверишь. Ниже — способы, которые дают точный ответ в любой ситуации, от простых до самых надёжных.
- Зачем вообще знать разрядность файла
- Способ 1: свойства файла в проводнике
- Способ 2: PowerShell — точный ответ за одну команду
- Способ 3: шестнадцатеричный просмотр заголовка PE
- Способ 4: сторонние утилиты
- Сравнение способов
- Пакетная проверка нескольких файлов
- Типичные ошибки и нюансы
- Что делать после проверки
Зачем вообще знать разрядность файла
32-битный EXE запускается и на 32-битной, и на 64-битной Windows (во втором случае через подсистему WOW64). А вот 64-битный EXE на 32-битной системе не запустится вовсе: система сообщит об ошибке вроде «не является приложением Win32» или просто не даст выполнить файл. Отсюда типичные сценарии, когда проверка нужна:
- программа не запускается, и нужно понять, в совместимости ли дело;
- выбираете версию драйвера, DLL или плагина под своё приложение — разрядности должны совпадать;
- разворачиваете ПО на сервере или в контейнере с известной архитектурой;
- анализируете незнакомый файл и хотите понять, под какую платформу он собран.
Важно не путать разрядность файла с разрядностью системы. 64-битная Windows спокойно работает с 32-битными программами, поэтому «файл не запускается на мощном компьютере» — частый повод проверить именно EXE.
Способ 1: свойства файла в проводнике
Самый быстрый вариант, который работает без дополнительных программ. Щёлкните по EXE правой кнопкой мыши, откройте «Свойства» и перейдите на вкладку «Совместимость» (в Windows 10 и новее — «Совместимость» → «Изменить параметры высокой точности DPI» не нужен, смотрим именно вкладку). В некоторых сборках Windows на вкладке «Подробно» или в описании файла указана разрядность, но это зависит от того, как её заполнил разработчик.
Более надёжный путь через проводник: откройте «Свойства» → вкладка «Подробно» и посмотрите поле «Тип файла». Если там написано «Приложение (32-разрядное)» — ответ получен. В Windows 11 это поле отображается чаще, чем в Windows 10, но гарантий нет: если разработчик не заполнил метаданные, поле покажет просто «Приложение».
Поэтому этот способ стоит рассматривать как первую быструю проверку: если ответ есть — хорошо, если нет — переходите к следующим вариантам.
Способ 2: PowerShell — точный ответ за одну команду
PowerShell умеет читать заголовок PE (Portable Executable — стандартный формат исполняемых файлов Windows) и показывать разрядность напрямую. Откройте PowerShell и выполните:
$path = «C:\путь\к\файлу.exe»; [System.Reflection.AssemblyName]::GetAssemblyName($path).ProcessorArchitecture
Одна оговорка: эта команда работает корректно для .NET-сборок. Для обычных нативных EXE она может выдать ошибку или неточный результат. Универсальный вариант для любого EXE — разобрать заголовок вручную:
$bytes = [System.IO.File]::ReadAllBytes(«C:\путь\к\файлу.exe»); $peOffset = [BitConverter]::ToInt32($bytes, 0x3C); $machine = [BitConverter]::ToUInt16($bytes, $peOffset + 4); «0x{0:X4}» -f $machine
Результат интерпретируется так:
- 0x8664 — 64-битный файл (архитектура x64);
- 0x014C — 32-битный файл (архитектура x86);
- 0xAA64 — сборка под Windows on ARM (ARM64);
- 0x01C4 — сборка под 32-битный ARM.
Это самый надёжный программный способ без установки чего-либо: он читает то, что записано в самом файле, а не метаданные, которые разработчик мог и не заполнить.
Способ 3: шестнадцатеричный просмотр заголовка PE
Если хочется понять механику, а не просто получить ответ, откройте EXE в hex-редакторе (HxD, аналоги — любой просмотрщик двоичных файлов). Логика такая:
- В начале файла найдите сигнатуру 4D 5A (буквы «MZ») — это начало DOS-заголовка.
- По смещению 0x3C от начала файла лежит четырёхбайтное значение — адрес PE-заголовка. Обычно это что-то вроде 80, E0 или F0 в шестнадцатеричном виде.
- Перейдите по этому адресу: там будет сигнатура 50 45 00 00 («PE»).
- Сразу после сигнатуры идут два байта поля Machine. Значение 4C 01 означает 32-битный файл, 64 86 — 64-битный.
Байты записаны в обратном порядке (little-endian), поэтому 0x014C в файле выглядит как «4C 01», а 0x8664 — как «64 86». Способ неудобен для массовой проверки, но он показывает первоисточник: разрядность жёстко зашита в заголовок при компиляции и не зависит от системы, где файл лежит.
Способ 4: сторонние утилиты
Для регулярной работы удобнее специализированные инструменты. Они бесплатны и распространяются в портативном виде:
- Dumpbin из состава Visual Studio (или Build Tools): команда dumpbin /headers файл.exe, в выводе смотрите строку «machine (x86)» или «machine (x64)». Вариант для разработчиков, у кого инструменты уже установлены.
- PE-bear, CFF Explorer, pestudio — графические просмотрщики PE-заголовков: открываете файл и видите поле Machine в человекочитаемом виде.
- Exeinfo PE, Detect It Easy — определяют не только разрядность, но и компилятор, упаковщик, наличие защиты. Удобны при анализе незнакомых файлов.
- Process Explorer от Sysinternals — если программа уже запущена: добавьте колонку «Image Type» и увидите разрядность каждого процесса, включая пометку для 32-битных процессов на 64-битной системе.
Выбор зависит от задачи: для разовой проверки достаточно PowerShell, для анализа подозрительных файлов — pestudio или Detect It Easy, для работы с запущенными процессами — Process Explorer.
Сравнение способов
| Способ | Что нужно | Надёжность | Когда удобен |
|---|---|---|---|
| Свойства файла | Только проводник | Средняя: зависит от заполненных метаданных | Быстрая разовая проверка |
| PowerShell (разбор PE) | Встроенная в Windows консоль | Высокая | Разовая и пакетная проверка без установки ПО |
| Hex-просмотр заголовка | Hex-редактор | Высокая | Понимание устройства файла, обучение |
| Dumpbin / PE-редакторы | Установка утилиты | Высокая | Регулярная работа, разработка, анализ |
| Process Explorer | Утилита Sysinternals | Высокая | Проверка уже запущенных процессов |
Пакетная проверка нескольких файлов
Если нужно проверить целую папку, PowerShell справится и с этим. Пример цикла, который выводит имя файла и код архитектуры:
Get-ChildItem «C:\путь\к\папке» -Filter *.exe | ForEach-Object { $b = [System.IO.File]::ReadAllBytes($_.FullName); $off = [BitConverter]::ToInt32($b, 0x3C); $m = [BitConverter]::ToUInt16($b, $off + 4); «{0}: 0x{1:X4}» -f $_.Name, $m }
Такой подход полезен при аудите набора утилит или проверке содержимого дистрибутива перед развёртыванием. Учтите, что для упакованных или повреждённых файлов смещение PE-заголовка может читаться некорректно — в этом случае утилиты вроде Detect It Easy дадут более информативный ответ.
Типичные ошибки и нюансы
- Путаница с папкой SysWOW64. На 64-битной Windows 32-битные системные библиотеки лежат именно в SysWOW64, а 64-битные — в System32. Названия интуитивно «перевёрнуты», и это регулярно сбивает с толку.
- Доверие имени файла. Надписи вроде «setup_x64.exe» в имени — лишь желание разработчика, а не гарантия. Проверяйте заголовок, если разрядность критична.
- AnyCPU у .NET-приложений. Сборка .NET может быть помечена как «AnyCPU»: такой EXE не содержит машинного кода под конкретную архитектуру и запускается в 32- или 64-битном режиме в зависимости от системы и флагов сборки. Для .NET-файлов поле Machine может не дать полной картины — смотрите флаг PE32/PE32+ и корфлаги.
- Установщики. EXE-установщик может быть 32-битным, но устанавливать 64-битное приложение, и наоборот. Разрядность установщика и устанавливаемой программы — разные вещи.
- ARM-сборки. Файлы под Windows on ARM имеют свои коды архитектуры и на обычном x64-компьютере без эмуляции не запустятся.
Что делать после проверки
Если выяснилось, что разрядность файла не подходит под систему, варианты такие: найти альтернативную сборку программы (большинство приложений распространяются в обеих версиях), обновить операционную систему до 64-битной версии (если оборудование это поддерживает) или, для 32-битного файла на 64-битной системе, просто запустить его — он должен работать через подсистему совместимости. Если же 64-битный EXE не запускается на 64-битной Windows, причина почти наверняка не в разрядности: ищите проблему в отсутствующих библиотеках, правах доступа или повреждении файла.
Главный принцип: разрядность зашита в заголовок PE-файла при компиляции, и именно её нужно читать. Для разовой проверки достаточно PowerShell или свойств файла, для регулярной работы поставьте один из PE-просмотрщиков — это займёт минуту и избавит от догадок.
