开发者

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 sur开发者_JS百科prised 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?


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


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.


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?


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

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜