繁体   English   中英

为什么我的应用程序(我使用Any CPU编译)在我的64位计算机上作为32位进程运行?

[英]Why is my application, which I compiled with Any CPU, running as a 32-bit process on my 64-bit machine?

我有以下代码,不能在x64操作系统上运行,因为notepad.exe是x64,x86应用程序无法获取x64进程的模块信息。

prc.Modules[0].FileName

.Net异常会抛出我的代码

System.ComponentModel.Win32Exception(0x80004005):32位进程无法获得64位进程的模块。

根据这个论坛上的许多答案和文章,MSDN,...,我知道我需要使用AnyCPU,因为使用x64对我没有特别的好处。 (不好意思:我测试了一个检查性能的代码,x64代码运行速度快了~40毫秒。没关系我不希望我的代码运行速度快40毫秒:D)相反我不会有这样的问题。 但即使在AnyCPU配置上编译时也是如此。 我的错误仍然存​​在,此外,在任务管理器中,我在进程名称的末尾看到一个(32位)

我不知道那是错的。 VS 2011 Beta(x64)Windows 8 Consumer Preview(x64)

真诚的,Peyman Mortazavi

进入项目属性。 在左侧,选择Build。

查看当前活动平台的“平台目标:”设置。 将其更改为x64。

(我怀疑你的“平台目标:”将明确表示为“任何CPU”的x86)

在此输入图像描述

虽然提问者接受了答案,但我觉得答案是不完整的,因为提问者提到他正在使用Visual Studio 2011,因此假设目标.Net Framework为4.5,关于“ AnyCPU ”意味着什么几乎没有任何警告。

请参阅这两个链接,以便更好地了解“ AnyCPU ”的含义随时间的变化情况。

  1. http://blogs.microsoft.co.il/sasha/2012/04/04/what-anycpu-really-means-as-of-net-45-and-visual-studio-11/
  2. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/platform-compiler-option

通过这些链接,您可以得到应用程序为何以32位进程运行的问题的答案

在64位Windows操作系统上:

使用/ platform:anycpu32bitpreferred编译的可执行文件在32位CLR上执行。

这是你的罪魁祸首。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM