C#System.Diagnostics.Process:can';t在64位操作系统中启动32位exe文件

C#System.Diagnostics.Process:can';t在64位操作系统中启动32位exe文件,c#,process,64-bit,32-bit,C#,Process,64 Bit,32 Bit,我有一个用Turbo Pascal编译的32位exe文件。我需要启动它。当我使用Windows 7 32位时,它工作得很好,但现在我使用的是Windows 7 64位,我得到以下例外: 指定的可执行文件不是此操作系统平台的有效应用程序 为了确保它能在32位系统上工作,我在32位平台上启动了C#程序——它能工作 那么,如何在64位操作系统中启动32位exe文件呢 谢谢我认为Turbo Pascal没有64位编译器,所以我认为您唯一的选择是编译针对32位环境的应用程序。如果您是从.NET(C#)应用

我有一个用Turbo Pascal编译的32位exe文件。我需要启动它。当我使用Windows 7 32位时,它工作得很好,但现在我使用的是Windows 7 64位,我得到以下例外:

指定的可执行文件不是此操作系统平台的有效应用程序

为了确保它能在32位系统上工作,我在32位平台上启动了C#程序——它能工作

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


谢谢

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

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

编辑:这篇MSDN文章解释了如何修改此设置:


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

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


不能在64位操作系统上运行16位进程。您可能有机会使用它。

您可以从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");

我很困惑。您是在启动Turbo Pascal程序还是C#程序?我上次使用Turbo Pascal是15年前,它是16位的。你是从C#内部启动Turbo Pascal程序吗?我是从C#程序启动Pascal程序。我不确定,它可能是用支持32位操作系统的免费Pascal编译的。但我可以在32位系统上启动它。@Alex-是的,当然,那不是运行64位操作系统。我同意Hans的观点,请仔细检查你的程序是否真的是16位的,Windows 64放弃了对16位操作系统的支持。你可以用一个程序检查它,就像你是对的一样。pascal程序实际上是16位的。我用免费的Pascal重新编译了它(我有源代码),所以现在它可以正常工作了。非常感谢。丹尼斯:64位应用程序没有理由不能启动32位应用程序。@Gabe我想你是对的。也许我在考虑在64位应用程序中使用32位DLL。