10

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

The code is written in C#.

phuclv
  • 37,963
  • 15
  • 156
  • 475

6 Answers6

22

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

phuclv
  • 37,963
  • 15
  • 156
  • 475
Matt Briggs
  • 41,224
  • 16
  • 95
  • 126
11

Command-line form:

corflags application.exe /32BIT+ 
alexdej
  • 3,751
  • 23
  • 21
8

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 :-)

phuclv
  • 37,963
  • 15
  • 156
  • 475
Campbell
  • 81
  • 1
  • 1
5

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

Dirk Vollmar
  • 172,527
  • 53
  • 255
  • 316
1

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.

JD Conley
  • 2,916
  • 1
  • 19
  • 17
0

Setting the project to x86 will prevent the file from executing on non-x86 platforms such as ARM. Since Visual Studio 11 and .NET framwork 4.5 there's a new option named 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

Further reading

phuclv
  • 37,963
  • 15
  • 156
  • 475