为什么我的64位服务运行为32位?

时间:2015-08-18 19:00:16

标签: c# windows service 64-bit corflags

我有一个Windows服务,我遇到了这个问题。

  • 在Visual Studio中,我已将其平台目标设置为64位
  • 我已经运行CorFlags来验证它设置是否正确,我明白了:
   
Version   : v4.0.30319
CLR Header: 2.5  
PE        : PE32+
CorFlags  : 0x1    
ILONLY    : 1       
32BITREQ  : 0        
32BITPREF : 0        
Signed    : 0

我甚至尝试使用32BITREQ-32BITPREF-标志运行Corflags,以确保它设置为它应该是什么但没有骰子。在taskManager中,它显示为:

MyServiceName(32位)

Service已与Topshelf 3.0一起安装,并且正在Windows Server 2012 R2 Standard上运行。这里发生了什么?

2 个答案:

答案 0 :(得分:1)

当服务的之前版本为32位时,我遇到了此问题。我知道当前安装的没有(检查过CORFLAGS),但是与服务相关的进程无论如何都被创建为32位,并且在我的生活中我无法理解为什么。

重启后问题就消失了。我想知道服务控制管理器是否“记住”每项服务的位数,作为启动优化(或其他)。

答案 1 :(得分:0)

也许您的安装工具使用32位installutil来安装该进程?据我所知this article

使用32位installutil会导致可执行文件在64位操作系统中以32位运行。

本文的这一部分特别如此:

  

要解决此问题,请在相应的Framework / Framework64目录之外运行installutil.exe。如果你有一个为ILONLY构建的管理单元(ILONLY表示可执行文件包含纯IL代码并且可以作为32位或64位进程运行),但想要在wow64配置单元下注册它,请使用installutil。目录%windir%\ microsoft.net \ framework \ v2.nnn中提供的exe文件对于64位配置单元注册,请从%windir%\ microsoft.net \ framework64 \ v2.n.n.n目录运行installutil.exe。