C#System.Diagnostics.Process:无法在64位操作系统中启动32位exe文件

时间:2010-09-28 16:02:30

标签: c# process 64-bit 32-bit

我有一个用Turbo Pascal编译的32位exe文件。我需要启动它。当我使用Windows 7 32位时它运行良好,但现在我使用的是Windows 7 64位,我得到以下异常:

  

指定的可执行文件不是此OS平台的有效应用程序。

为了确保它在32位系统上运行,我在32位平台上启动了C#程序 - 它可以工作。

那么如何在64位操作系统中启动32位exe文件?

由于

4 个答案:

答案 0 :(得分:12)

Turbo Pascal只能生成16位代码,从来没有一个版本可以创建32位可执行文件。运行16位代码需要使用CPU中的实模式仿真支持的虚拟机(virtual 8086 mode)。如果处理器以64位模式运行,则此仿真不可用。

您无法在64位操作系统上运行16位进程。您可能会尝试使用DOSBox emulator

答案 1 :(得分:2)

如果从.NET(C#)应用程序中启动32位exe,则需要将.NET应用程序的目标设置为x86。如果将其设置为任何CPU,则它将在64位操作系统上作为64位进程运行,因此无法启动32位进程。

编辑:此MSDN文章介绍了如何修改此设置: http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx

编辑2:正如Gabe指出的那样,64位应用程序无法启动32位exe应该没有理由。我知道你不能在64位应用程序中使用32位DLL。只是认为值得尝试,因为文档没有指定在使用System.Diagnostics.Process启动exe时是否存在相同的限制。

答案 2 :(得分:2)

您可以从64位应用程序启动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");

答案 3 :(得分:1)

我认为Turbo Pascal没有64位编译器,所以我认为您唯一的选择是针对32位环境编译您的应用程序。