2010-03-23 58 views
6

我有一個WiX安裝程序中的ServiceInstall組件,我需要根據傳入MSI的參數啓動自動或需求。參數化WiX安裝程序中的服務啓動選項

所以有問題的XML元素是

<ServiceInstall Vital="yes" 
    Name="My Windows Service" 
    Type="ownProcess" 
    Account="[SERVICEUSERDOMAIN]\[SERVICEUSERNAME]" 
    DisplayName="My Service" 
    Password="[SERVICEUSERPASSWORD]" 
    Start="demand" 
    Interactive="no" 
    Description="Something interesting here" 
    Id="Service" 
    ErrorControl="ignore"></ServiceInstall> 

維克斯將不允許使用參數的start屬性,因此Im套牢與病症完全suplicating的組分,例如/

<Component Id="ServiceDemand" 
       Guid="{E204A71D-B0EB-4af0-96DB-9823605050C7}" > 
     <Condition>SERVICESTART="demand"</Condition>  
... 

並完全複製整個組件,使用不同的開始設置和不同的條件。

任何人都知道更優雅的解決方案?其中一個我不需要維護2個組件,除了啓動屬性外,其他組件完全一樣嗎?

+0

哎喲所需的名稱,那種很爛。我認爲你一直堅持使用你目前使用的方法,直到有人在WiX中修復它。 – 2010-03-23 14:41:10

回答

6

ServiceInstall表中的「開始」字段未格式化,因此您使用屬性放入的內容不起作用。這個鏈接有一些有用的建議,可能會讓你通過它:ServiceInstall - Start element。看起來像發佈的人有同樣的問題。他們提供的我最喜歡的建議是創建一個在InstallServices操作之前運行的自定義操作,該操作將更改Service Install表中的Start元素的值。

更新:修改了建議網站的鏈接。

+0

感謝您的鏈接/信息。我會按照我認爲的CA的建議去做。 – Jamiec 2010-03-24 13:10:12

+0

我發現很多問題都可以由那些傢伙解答。這裏經常使用另一個很好的網站。 http://blogs.technet.com/alexshev/pages/from-msi-to-wix.aspx – 2010-03-24 19:20:22

+0

Nabble鏈接現在被打破。在ServiceInstall-Start-element上搜索應該可以獲得wix或nabble上重定位文檔的鏈接。 – 2011-04-04 23:28:43

0

不幸的是,安裝和控制服務的標準Wix功能相當有限。

雖然不理想,但它可以使用CustomAction使用CAQuietExec(如果你使用一個也方便保存輸出到安裝日誌文件)來完成,例如

<CustomAction Id="QtExec_Install_Cmd" Property="QtExec_Install" Value="sc create [SERVICE_NAME] binPath=&quot;[INSTALLFOLDER]$(var.MAIN_EXECUTABLE)&quot; start=[SERVICE_START_FLAG]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Install" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <CustomAction Id="QtExec_Uninstall_Cmd" Property="QtExec_Uninstall" Value="sc delete [SERVICE_NAME]" Execute="immediate" /> 
    <CustomAction Id="QtExec_Uninstall" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" /> 
    <InstallExecuteSequence> 
    <Custom Action="QtExec_Install_Cmd" After="CostFinalize"/> 
    <Custom Action="QtExec_Install" After="InstallServices">&amp;WindowsService=3</Custom> 
    <Custom Action="QtExec_Uninstall_Cmd" After="CostFinalize"/> 
    <Custom Action='QtExec_Uninstall' Before="RemoveFiles">NOT &amp;WindowsService=3 AND NOT &amp;WindowsService=-1</Custom> 
    </InstallExecuteSequence> 

注:

  • WindowsService是功能的名稱

  • SERVICE_START_FLAG是控制是否啓動服務的屬性

  • [INSTALLFOLDER] $(var.MAIN_EXECUTABLE) - 是通向可執行

  • SERVICE_NAME是Windows服務

+0

謝謝你的回答。近7年遲到了,但我確定它會幫助別人:) – Jamiec 2017-01-18 10:55:11

+0

哈哈......我一直在使用Wix好多年了......現在可能應該停止......這是一個恥辱,沒有適當的選擇微軟,你的問題仍然有效。 – Ivan 2017-01-18 11:14:40

相關問題