2011-12-21 41 views
2

我使用Visual Studio C#Express創建了一個可執行的MyService.exe。 Express版本中沒有用於創建服務的選項。在過去,這已被手動爲用戶定義的服務使用INSTSRV和SRVANY作爲MSDN Article 'How To Create a User-Defined Service' Wix安裝程序替換INSTSRV和SRVANY以進行用戶定義的服務安裝

描述是否有可能創建一個WiX的3.5安裝此文件

  1. 沒有安裝需要SRVANY.EXE和INSTRV.exe文件的存在,在目標機器上
  2. 不使用INSTSRV.EXE作爲自定義操作
+1

C#Express可能沒有項目類型的服務,但我不能想象爲什麼:我喜歡創建一個EXE項目並自己實現ServiceBase類。那麼你不需要SrvAny.exe – 2014-05-15 13:49:12

回答

-1

維克斯不支持安裝Windows服務,但只有本地的。這意味着應用程序必須是written as a service

由於您的應用程序使用SRVANY.EXE作爲服務運行,你有兩個選擇

  • 重寫應用程序作爲本機Windows服務

+1

這並不完全正確。您可以使用SRVANY.EXE將您的EXE作爲服務包裝,並使用Wix/MSI ServiceInstall功能來替換INSTSRV.EXE。 – 2014-05-14 16:01:22

2

這裏是真正的獨家新聞:服務就是服務就是服務。這是我的座右銘。我的意思是我不在乎你是否正在使用C++ EXE,VB EXE,C#EXE,某些thunking主機EXE(如SrvAny.exe)......他們都實現了相同的API來與服務交互控制經理。

所以SrvAny將被SCM調用並獲得一個啓動命令。此時它將讀取註冊表值並知道如何運行其他EXE或腳本。當SrvAny獲得停止調用時,它將終止您的進程並將報告停止給SCM。

這就是服務運行的方式。我們來談談如何安裝它。有很多方法可以以編程方式創建服務(SC,InstSrv.exe,安裝程序類自定義操作等),但從MSI角度來看,並不需要它們。 Windows安裝程序具有ServiceInstall和ServiceControl表以及用於處理啓動,停止,創建和刪除Windows服務的標準操作。有時候,比如SrvAny.exe的情況,你會得到一些無法用這些表格表達的安裝程序要求,在這種情況下,你使用註冊表表格。對於SrvAny.exe,需要創建一個帶有註冊表數據的參數密鑰,該註冊表數據會教導SrvAny.exe啓動時實際調用的內容。

下面是維克斯樣本使用SRVANY.EXE運行腳本的NodeJS作爲服務:

<Component Id="c1" Guid="redacted"> 
    <File Id="f1" Source="$(var.SourceDir)\srvany.exe" KeyPath="yes" /> 
    <ServiceInstall Id="si1" DisplayName="MyService" Description="MyService" Name="MyService" Start="auto" Type="ownProcess" Vital="no" ErrorControl="normal" Account="NT AUTHORITY\NetworkService" /> 
    <ServiceControl Id="sc1" Name="MyService" Remove="both" Stop="both" Start="install" Wait="yes" /> 
    <RegistryValue Id="reg1" Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\MyService\Parameters" Name="Application" Type="string" Value="node &quot;[#f2]&quot;" Action="write" /> 
</Component> 
<Component Id="c2" Guid="redacted" KeyPath="yes"> 
    <File Id="f2" Source="$(var.SourceDir)\server.js" /> 
</Component> 
+0

謝謝你的回答。這真的是我想要的+1 – DarwinIcesurfer 2014-05-15 17:56:35

+0

對不起,我幾年前沒有看到它。 – 2014-05-15 18:00:11