如何在64位操作系统上将.NET可执行文件作为32位进程运行?

时间:2011-03-16 13:01:26

标签: .net 64-bit .net-1.1 visual-studio-2003 corflags

我想让我的.NET应用程序在带有.NET1.1的64位计算机上作为32位进程运行。目标平台选项是在VS(2005)的更高版本中引入的,但我使用的是VS2003和.NET1.1,并且没有机会使用其他VS或.Net

这可能吗?

P.S。我不知道这是否相关,但是我的一位同事说我应该使用“cor flags”或“核心标志”,但谷歌搜索它没有提出任何有趣的结果

5 个答案:

答案 0 :(得分:3)

您可以告诉Windows以32位运行应用程序。

尝试:corflags myassembly.exe /32bit+

请参阅the docs of the corflags.exe utility

StackOverflow有一个excellent summary of CorFlags here

答案 1 :(得分:2)

您可能需要手动使用编译器并指定目标平台:

http://msdn.microsoft.com/en-us/library/zekwfyz4(v=vs.80).aspx

答案 2 :(得分:2)

您无需做任何事情。 .NET 1.1不支持在64位模式下运行托管代码。直到.NET 2.0才能使用。使用VS2003编译的任何EXE程序集都会询问1.1版本的CLR,它会自动以32位模式运行托管代码。

同样,您也没有Corflags.exe实用程序。它最初随.NET 2.0 SDK一起提供,现在使用Windows SDK。 Visual Studio 2005及更高版本允许您通过在项目选项中选择“平台目标”来设置Corflags.exe操作的cor标头中的选项位。

请注意没有安装.NET 1.1的64位计算机。他们将使用版本2 CLR运行您的应用程序,并且将以64位模式运行。在Vista和更高版本中实现的UAC也会带来麻烦,您的EXE将没有清单,Windows会像传统程序一样对待它。当效果不佳时,很难诊断出来。并且VS2003在XP之后的操作系统上不受支持。有一个缺陷列表,其中大多数是调试问题。使用客户的操作系统功能更新工具非常重要,8年是狗年和软件工具的长期工作。

答案 3 :(得分:0)

在配置管理器中,您应该能够选择平台为x86 - 我认为这样做,因为我无法想到其他任何有益的东西。

编辑:哦,这是一个optimization thing。 Damnit,现在我的名声永远不会有一个数字......

答案 4 :(得分:0)

如果不做任何事情,它不应该这样做吗? 1.1仅为32位。如果.NET 1.1不存在,你的程序将以版本存在运行,但是框架可能足够智能,知道1.1应用程序只能运行32位。

其他你可以尝试在机器上安装1.1,这样你的应用程序就可以绑定到它并且只能以32位运行。

http://technet.microsoft.com/en-us/library/cc785813(WS.10).aspx

这似乎证实了我的理论:

http://blogs.artinsoft.net/pdermody/archive/2005/04/07/153.aspx

  

加载.NET 1.1应用程序   Windows 64位

     

我很惊讶地发现    - 你可能会惊讶地听到 - 微软决定不允许   甚至是纯粹的.NET应用程序   建立在具有一定特权的32位机器上   要运行的Visual Studio版本   64位CLR。