Ryan Ternier
Ryan Ternier

Reputation: 8814

Check if my program is running in 32 bit mode on a 64bit machine, if running in 64bit - how do I force it to be 32bit

We have a windows service created in .NET 2.0. I've set the Platform Target to X86, and the installer to be X86. The projects it references are set to ANYCPU.

We're running this on a 64bit server. It has to be 32bit because the ODBC drivers it accesses are 32bit, and they bomb heavily if accessed from a 64bit application.

I've seen that on a 64bit machine, some processes have the *32 beside them to denote 32bit, however that doesn't seem to be the case with a test one I created that specifically targets 32bit (X86) to see if it actually was that. The service we're running does not show *32 beside the service name.

Any thoughts on this? If it is not being run as 32 bit (X86), then I'm surprised as I've forced the build to be that.


Update, We found it's running in 64bit, even though the Services project was forced to buid in X86 mode. What would cause this?

Upvotes: 3

Views: 3078

Answers (4)

Yuliia Ashomok
Yuliia Ashomok

Reputation: 8598

private static bool Is64BitConfiguration()
{
     return System.IntPtr.Size == 8;
}

Upvotes: 1

Aaron Daniels
Aaron Daniels

Reputation: 9664

One plausible explanation for the discrepency is that you're deploying the output of a different build configuration.

Could it be that you setup your Debug configuration to target x86, but didn't make the change to the Release configuration, thereby leaving it as AnyCPU and deploying it to production?

Upvotes: 1

Philipp Schmid
Philipp Schmid

Reputation: 5828

Use corflags.exe to mark your assembly as 32 bit. You can do that as a post-build step if you'd like:

corflags.exe MyProgram.exe /32Bit+

I don't have an answer to your second question (you might want to create a separate SO question for that) why the x86 project runs as a 64-bit process.

Upvotes: 4

Jeffrey Sax
Jeffrey Sax

Reputation: 10323

You can use IntPtr.Size (MSDN docs). This will return 4 if running as 32 bit and 8 if running as 64 bit.

Upvotes: 6

Related Questions