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-битную среду.