Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使.NET可执行文件在64位操作系统上作为32位进程运行?_.net_64 Bit_.net 1.1_Visual Studio 2003_Corflags - Fatal编程技术网

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

如何使.NET可执行文件在64位操作系统上作为32位进程运行?,.net,64-bit,.net-1.1,visual-studio-2003,corflags,.net,64 Bit,.net 1.1,Visual Studio 2003,Corflags,我想让我的.NET应用程序在带有.NET1.1的64位机器上作为32位进程运行。在VS2005的更高版本中引入了目标平台选项,但我使用的是VS2003和.NET1.1,没有机会使用其他VS或.Net 这可能吗 另外,我不知道这是否相关,但我的一位同事说我应该使用cor标志或core标志,但谷歌搜索没有得到任何有趣的结果您可能需要手动使用编译器并指定目标平台: 您可以告诉Windows以32位的方式运行应用程序 Try:corflags myassembly.exe/32位+ 看 StackOve

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

这可能吗


另外,我不知道这是否相关,但我的一位同事说我应该使用cor标志或core标志,但谷歌搜索没有得到任何有趣的结果

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


您可以告诉Windows以32位的方式运行应用程序

Try:corflags myassembly.exe/32位+


StackOverflow在configuration manager中有一个.

,您应该能够选择x86平台——我想这是可以做到的,因为我想不出它还有什么好处


编辑:哦,这是一个很好的例子。该死的,现在我的名誉再也没有整数了…

它应该什么都不做吗?1.1仅为32位。如果.NET1.1不存在,您的程序将使用存在的版本运行,但该框架可能足够智能,可以知道1.1应用程序只能以32位运行

另外,您可以尝试在机器上安装1.1,这样您的应用程序将绑定到机器上,并且仅以32位运行

这似乎证实了我的理论:

在中加载.NET1.1应用程序 Windows 64位

我惊讶地发现 -你可能会惊讶地听到,微软决定不允许 即使是纯.NET应用程序 构建在32位机器上,具有特定的 要在其上运行的Visual Studio版本 64位CLR


你不必做任何事。NET 1.1不支持以64位模式运行托管代码。直到.NET2.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将把它当作遗留程序来处理。如果结果不好,很难诊断。在XP以前的操作系统上不支持VS2003。有一个缺陷列表,其中大部分是调试问题。让您的工具与客户的操作系统功能保持同步非常重要,顺便说一句,8年对于狗年和软件工具来说是一段很长的时间。

它目前是否以64位模式运行?我敢肯定,除非您在64位机器上编译,否则它将以您期望的方式运行。无论如何,VS总是一个32位的应用程序。@Kangkan:我不知道它是如何运行的。问题是,当我的应用程序在64位操作系统上运行时,其中一个P/invoke调用使其崩溃,目标函数从未被调用。所以我不知道还能做什么…你的编程语言是什么?你使用C++和使用指针BTW吗?@ Kangkan:我使用C,大量使用互操作。是的,有很多的ItpTr'VoVLVEDF,因为我正在从DLL调用多个C++函数。这个工具在.NETFramework 2版中是新的。写在你链接的页面上。@Armen:答案就在这里。查看您的代码在64位计算机上中断的原因。