32-битный исполняемый файл работает как 64-битный процесс Windows?

У меня есть проект, который генерирует 32-битный исполняемый файл. Этот исполняемый файл входит в состав более крупного пакета, в котором исполняемый файл устанавливается как служба Windows с помощью установщика MSI. Несмотря на то, что исполняемый файл является 32-разрядным (я изучил заголовок файла), процесс выполняется как 64-разрядный процесс. Я пытался отладить этот процесс, и когда я открыл меню «Присоединить процесс» через Visual Studio, я увидел, что его тип включает x64 вместо x86.

Это возможно или я что-то упускаю? Если возможно, как я могу сделать это для другого 32-битного исполняемого файла?

Это исполняемый файл .NET или собственный двоичный файл?

PMF 11.11.2022 13:11

@PMF Это исполняемый файл .NET.

Stupid Man 11.11.2022 13:16

Исполняемый файл .NET точно такой же, как приложения Java или Dalvik, они содержат байт-коды и запускаются на виртуальной машине, поэтому, очевидно, они будут скомпилированы для любых собственных платформ. Они будут работать даже на ARM, RISC-V, PPC... пока доступна соответствующая виртуальная машина.

phuclv 12.11.2022 11:06
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
3
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для исполняемых файлов .NET это нормально. Исполняемые файлы .NET запускаются в любой подходящей среде, в зависимости от доступного оборудования и версии среды выполнения. Можно принудительно запустить исполняемый файл .NET в 32-битном режиме, но обычно это делается только тогда, когда ему необходимо взаимодействовать с 32-битной собственной dll.

Детали немного различаются между сборками .NET Framework и сборками .NET Core/NET5.0+. Но в последнем случае целевая среда выполнения указывает, запускает ли она двоичный файл в 32-битном или 64-битном режиме. Теперь это легко, так как приложение почти всегда построено в режиме «Любой ЦП», сообщая среде выполнения, что приложению все равно, какой ЦП используется (или какая операционная система, оборудование и т. д.)

У меня есть 2 версии этого исполняемого файла, обе 32-разрядные, но одна работает как 64-разрядная служба Windows, а другая — как 32-разрядная служба. Это из-за того, как они построены? Вероятно, один использовал «Любой процессор», а другой использовал какую-то другую конфигурацию?

Stupid Man 11.11.2022 14:15

Это возможно. Вы используете .NET Framework или .NET Core?

PMF 11.11.2022 14:21

Я использую .NET Framework

Stupid Man 11.11.2022 14:29

Для .NET Framework это встроено в код. Во время компиляции вы можете объявить, хотите ли вы запускать приложение в 32-битном или 64-битном режиме (или решить во время выполнения). Так что да, вполне вероятно, что две версии были созданы с разными настройками.

PMF 11.11.2022 15:14

Вы были правы, я смог запустить второй 32-битный исполняемый файл как 64-битный процесс после того, как изменил настройки сборки. У вас есть какой-нибудь документ/видео, где я могу больше узнать об этих вещах, особенно для .NET?

Stupid Man 11.11.2022 19:55

Нет, мне нужно будет найти это самому. Я слишком долго боролся с этим. Но в настоящее время вы можете просто перейти на 64-битную версию и все, потому что 32-битная Windows практически мертва.

PMF 11.11.2022 22:39

Другие вопросы по теме