Running a 32-bit C# application on a 64-bit machin

2019-01-19 13:51发布

问题:

How do I force my application to run as 32 bit on a 64 bit machine?

The code is written in C#.

回答1:

Right click your project, and select properties.

In properties, select the build tab. Under platform target, select x86.

Hit Ctrl+Shift+S to save all files, right click the solution and select "Clean" to get rid of old binaries. Any builds after that should be 32 bit



回答2:

Command-line form:

corflags application.exe /32BIT+ 


回答3:

Here's how I did it when we couldn't change the existing code from Any CPU to x86 due to a ClickOnce limitation:

Create a 32-bit (x86 must be checked under project properties) 'launcher' application (Windows Application but not form):

    static void Main(string[] args)
    {
        // Load the assembly    
        string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        string assemblyName = Path.Combine(directory, "YourAnyCPUApplication.exe");
        Assembly assembly = Assembly.LoadFile(assemblyName);
        assembly.EntryPoint.Invoke(null, null);
    }

Add the following code to the Main method in the Any CPU project:

        if (IntPtr.Size == 4)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            // etc...
        }
        else
        {
            // Launch application in 32-bit mode
            System.Diagnostics.Process.Start(Path.GetDirectoryName(Application.ExecutablePath) + @"\Your32BitApplicationLauncher.exe");
        }

I hope this helps :-)



回答4:

If you go to Configuration Manager in Visual Studio you can set the platform to x86 or x64.



回答5:

Assuming this is a Winforms, console app, or Windows service you have to build the exe for x86 instead of Any CPU. It's in the Configuration Manager.



回答6:

Visual Studio 11 and .NET framwork 4.5 or above have an option for Any CPU 32-bit preferred and this was the default since then

The resulting code will run on any platforms but on 64-bit platforms they are run as 32-bit processes