开发者

C# System.Diagnostics.Process: can't launch a 32 bit exe file in 64 bit OS

开发者 https://www.devze.com 2023-01-17 18:24 出处:网络
I have a 32 bit exe file compiled with Turbo Pascal. I need to launch it. It worked well when I had Windows 7 32 bit, but now I\'m on Windows 7 64 bit, and I get the following exception:

I have a 32 bit exe file compiled with Turbo Pascal. I need to launch it. It worked well when I had Windows 7 32 bit, but now I'm on Windows 7 64 bit, and I get the following exception:

The specified executable is not a valid application for this OS platform.

To make sure it works on 32 bit systems, I launched the C# program in a 32 bit platform - it works.

So how can I launch a 32 bit exe file in 64 bit OS?

Thanks开发者_高级运维


Turbo Pascal could only generate 16-bit code, there was never a version that could create 32-bit executables. Running 16-bit code requires a virtual machine that uses the real-mode emulation support in the CPU (virtual 8086 mode). This emulation is not available if the processor is running in 64-bit mode.

You cannot run 16-bit processes on a 64-bit operating system. You may have a shot at getting it going with the DOSBox emulator.


If you're launching the 32 bit exe from within a .NET (C#) application, then you'll need to set the target for your .NET app to x86. If it's set as Any CPU, then it will run as a 64 bit process on a 64 bit OS and therefore won't be able to launch the 32 bit process.

Edit: This MSDN article explains how to modify this setting: http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx

Edit 2: As Gabe points out, there shouldn't be a reason why the 64 bit app could not start a 32 bit exe. I know you can't use a 32-bit DLL from within a 64-bit app. Just thought it would be worth trying since the documentation doesn't specify if that same restriction exists when using System.Diagnostics.Process to launch an exe.


You can launch 32bit application from 64bit application.

C# Example 1:

var processStartInfo = new ProcessStartInfo("C:\MyApp.exe");
var process = new Process { StartInfo = processStartInfo };
process.Start();
process.WaitForExit();

C# Example 2:

System.Diagnostics.Process.Start("C:\MyApp.exe");


I don't think there is a 64 bit compiler for Turbo Pascal so I think your only choice is to compile your app targeting a 32 bit enviornment.

0

精彩评论

暂无评论...
验证码 换一张
取 消