C# System.Diagnostics.Process: не удается запустить 32-битный исполняемый файл в 64-битной ОС

У меня есть 32-битный исполняемый файл, скомпилированный с Turbo Pascal. Мне нужно запустить его. Это работало хорошо, когда у меня была Windows 7 32-битная, но теперь я на Windows 7 64-битная, и я получаю следующее исключение:

Указанный исполняемый файл не является допустимым приложением для этой платформы ОС.

Чтобы убедиться, что он работает на 32-битных системах, я запустил программу C# на 32-битной платформе - она ​​работает.

Итак, как я могу запустить 32-битный исполняемый файл в 64-битной ОС?

Спасибо

4 ответа

Решение

Turbo Pascal мог генерировать только 16-битный код, никогда не было версии, которая могла бы создавать 32-битные исполняемые файлы. Для запуска 16-битного кода требуется виртуальная машина, которая использует поддержку эмуляции реального режима в ЦП ( режим виртуального 8086). Эта эмуляция недоступна, если процессор работает в 64-битном режиме.

Вы не можете запускать 16-битные процессы в 64-битной операционной системе. Вы можете попробовать его с помощью эмулятора DOSBox.

Вы можете запустить 32-битное приложение из 64-битного приложения.

C# Пример 1:

var processStartInfo = new ProcessStartInfo("C:\MyApp.exe");
var process = new Process { StartInfo = processStartInfo };
process.Start();
process.WaitForExit();

C# Пример 2:

System.Diagnostics.Process.Start("C:\MyApp.exe");

Если вы запускаете 32-битный exe-файл из приложения.NET (C#), то вам нужно установить цель для вашего.NET-приложения на x86. Если он установлен как Любой ЦП, он будет работать как 64-битный процесс в 64-битной ОС и, следовательно, не сможет запустить 32-битный процесс.

Изменить: В этой статье MSDN объясняется, как изменить этот параметр: http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx

Редактировать 2: Как отмечает Гейб, не должно быть причины, по которой 64-битное приложение не может запустить 32-битную версию. Я знаю, что вы не можете использовать 32-битную DLL из 64-битного приложения. Просто подумал, что стоит попробовать, так как в документации не указано, существует ли такое же ограничение при использовании System.Diagnostics.Process запустить exe.

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

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