使用64位installutil时,为什么我的.NET进程以32位运行?

时间:2016-10-24 15:29:13

标签: c# .net windows

我们已经安装了一个C#控制台应用程序作为Windows服务。目标64位计算机正在运行Windows Server 2012.我们使用64位installutil实用程序:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>installutil -i C:\Services\MainService\Service.exe

但是,当我看到进程在任务管理器中运行时,它显示它以32位进程运行:

Snapshot_of_task_manager_32bit_process

为什么会这样,以及如何让进程以64位运行?

我在这里看到了这个问题,但还没有人回答:

  

Why is my 64 bit service running as 32 bit?

1 个答案:

答案 0 :(得分:0)

我最终做的是使用CorFlags.exe从EXE中删除32BITPREF标志。我刚在TeamCity中设置了一个构建步骤来涵盖这个:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\"CorFlags.exe Service.exe /nologo /32BITPREF-

我认为更好的方法是手动完成每个项目并禁用该标志。正如有人提到的,一个简单的grep和sed最有可能成功。

更新

清除"首选32位" flag是一个更好的选择。这可确保编译64位版本,并且不需要TeamCity构建配置中的自定义脚本。