2015-08-18 88 views
3

我有一個Windows服務,我遇到此問題。爲什麼我的64位服務以32位的方式運行?

  • 在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,以確保它被設置爲它應該是的但不是骰子。在任務管理器也顯示爲:

服務名(32位)

服務安裝與Topshelf 3.0和Windows Server 2012 R2標準版上運行。這裏發生了什麼?

+0

它是一個64位的盒子嗎? ;) –

+0

@ 500 - 內部服務器錯誤 - 哈哈,是的,我沒有犯這個錯誤 – snappymcsnap

+0

你是否引用任何32位庫?您在.csproj中將Prefer32Bit設置爲true嗎? –

回答

0

也許你的安裝工具正在使用32位installutil安裝過程?據我所知,從this article

使用32位installutil導致迫使可執行文件在64位操作系統中作爲32位運行。

尤其是文章的這一部分,似乎這樣說:

爲了解決這個問題,請適當的框架/ Framework64目錄之外運行installutil.exe。如果您有一個爲ILONLY構建的管理單元(ILONLY表示可執行文件包含純IL代碼,並且可以以32位或64位進程運行),但想要在wow64配置單元下注冊它,請使用installutil。 exe文件在%windir%\ microsoft.net \ framework \ v2.nnn目錄中可用對於64位配置單元註冊,從%windir%\ microsoft.net \ framework64 \ v2.n.n.n目錄運行installutil.exe。

+1

我正在使用Topshelf作爲安裝程序,而不是installutil – snappymcsnap

+0

我在暗示Topshelf可能會使用installutil。雖然找不到任何有關此信息。 –

+0

該文章是關於MMC snapins,而不是服務。他們沒有關係。 –

1

我有這個問題,當一個以前的版本的服務已經32位。我知道當前安裝的一個不是(檢查CORFLAGS),但與服務相關的過程正在創建爲32位,並且對於我來說,我無法弄清楚爲什麼。

重啓後,問題就消失了。我想知道服務控制管理器是否記得每個服務的位數,作爲啓動優化(或其他)。

相關問題