10

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

The code is written in C#.

phuclv
  • 32,499
  • 12
  • 130
  • 417

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
  • 32,499
  • 12
  • 130
  • 417
Matt Briggs
  • 40,015
  • 14
  • 92
  • 126
11

Command-line form:

corflags application.exe /32BIT+ 
alexdej
  • 3,671
  • 22
  • 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
  • 32,499
  • 12
  • 130
  • 417
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
  • 167,121
  • 53
  • 251
  • 309
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
  • 18
  • 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
  • 32,499
  • 12
  • 130
  • 417