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

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

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

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

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

Спасибо

 Morten Bergfall28 сент. 2010 г., 18:08
 CoderDennis28 сент. 2010 г., 18:11
Вы запускаете программу Turbo Pascal из C #?
 Alex28 сент. 2010 г., 18:25
Я запускаю программу на Паскале из программы на C #. Я не уверен, что это могло быть скомпилировано с Free Pascal, который поддерживает 32-битную ОС.
 CoderDennis28 сент. 2010 г., 18:10
Я не совсем понимаю. Вы запускаете программу Turbo Pascal или C #? В прошлый раз я использовал Turbo Pascal 15 лет назад, и это было 16 бит.

Ответы на вопрос(4)

то вам нужно установить цель для вашего .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.

 Gabe28 сент. 2010 г., 19:42
Деннис: Нет причин, по которым 64-битное приложение не сможет запустить 32-битное приложение.
 CoderDennis28 сент. 2010 г., 19:48
@ Гэбб, я думаю, ты прав. Возможно, я думал об использовании 32-битной DLL из 64-битного приложения.
 Alex28 сент. 2010 г., 18:26
Как я могу это сделать?

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

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-битные исполняемые файлы. Для запуска 16-битного кода требуется виртуальная машина, которая использует поддержку эмуляции реального режима в ЦП (виртуальный режим 8086). Эта эмуляция недоступна, если процессор работает в 64-битном режиме.

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

 Hans Passant28 сент. 2010 г., 18:27
@ Алекс - Да, конечно, это не работает под управлением 64-битной операционной системы.
 Alex01 окт. 2010 г., 10:02
Вы правы. Программа на паскале действительно была 16-битной. Я перекомпилировал его с помощью Free Pascal (у меня есть исходники), так что теперь он работает нормально. Спасибо!
 Alex28 сент. 2010 г., 18:25
Но я мог запустить его на 32-битной системе.
 Scott Chamberlain28 сент. 2010 г., 20:43
Я согласен с Гансом, дважды проверьте, что ваша прога на самом деле не 16-битная, Windows 64 отказалась от поддержки 16-битной. Вы можете проверить это с помощью программы, какEXE Explorer

Ваш ответ на вопрос