8

为什么我使用AnyCPU编译的应用程序在我的 64 位计算机上作为 32 位进程运行,因此无法与作为 64 位进程运行的记事本交互?

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

prc.Modules[0].FileName

.Net 异常抛出我的代码:

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

根据这个论坛上的许多答案和文章,MSDN,...,我知道我需要使用 AnyCPU,因为使用 x64 对我没有特别的好处。即使在 AnyCPU 配置上编译时,我的错误仍然存​​在,此外,在任务管理器(32-bit)中,我在进程名称的末尾看到一个。

(实际上,我通过检查性能测试了代码,x64 代码运行速度快了约 40 毫秒。没关系,我不希望我的代码运行速度快 40 毫秒:D)

我不知道这是错的。

VS 2011 测试版 (x64)

Windows 8 消费者预览版 (x64)

此致,佩曼·莫尔塔扎维

4

2 回答 2

11

尽管发问者已经接受了答案,但我觉得答案不完整,因为发问者提到他正在使用 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 上执行。

这是你的罪魁祸首。

在此处输入图像描述

于 2017-12-10T13:10:41.620 回答
2

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

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

(我怀疑您的“平台目标:”对于“任何 CPU”将明确为 x86)

在此处输入图像描述

于 2012-06-06T16:43:16.867 回答