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

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

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

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

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

Спасибо

Ответы [ 4 ]

12 голосов
/ 28 сентября 2010

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

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

2 голосов
/ 28 января 2011

Вы можете запустить 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");
2 голосов
/ 28 сентября 2010

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

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

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

1 голос
/ 28 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...