2009-09-28 31 views
9

我正在使用WiX安裝Windows服務。如何使服務在運行安裝程序的Windows用戶環境中運行?WiX ServiceInstall - 將服務設置爲以當前Windows用戶身份運行

+0

爲什麼要以當前用戶身份運行服務?服務的大部分要點是在沒有用戶登錄的情況下運行 - 並且能夠以LocalSystem的身份運行,以便於可執行文件的管理員權限。我相信你有一個很好的理由...... – 2009-10-02 04:26:36

+2

你爲什麼要將它作爲特定用戶來運行的一個原因是它需要連接到SQL服務器,並且SQL服務器被配置爲使用Windows身份驗證......它更容易沒有將「本地服務」添加到SQL用戶列表中。 – 2010-09-07 08:37:06

回答

21

您需要同時擁有要運行該服務的用戶的帳戶名和密碼。我可以通過向我的安裝程序添加一個自定義用戶界面來請求用戶名和密碼,然後使用ServiceInsall元素上的帳戶和密碼屬性提供的值完成此操作。

請注意,用於運行服務的帳戶必須具有「登錄身份」服務特權。默認情況下,這不會授予用戶。我能夠使用UtilExtension架構中的用戶元素將此priveledge添加到用戶。如果運行安裝程序的用戶是管理員,則僅向用戶添加特權纔會成功。

這是我使用的代碼。 SERVICECREDENTIALS_USERLOGIN和SERVICECREDENTIALS_PASSWORD是從自定義用戶界面填充的屬性。

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 
    <File Id="ServiceEXE" Name="YourService.exe" DiskId="1" 
     Source="path\to\YourService.exe" KeyPath="yes" /> 
    <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]" 
      LogonAsService="yes" /> 
    <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService" 
        DisplayName="Your Service" Description="Your Service description" 
        Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]" 
        ErrorControl="normal" Interactive="no" /> 
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" /> 
</Component> 
+0

你能幫我嗎?我如何擁有2個組件1用於SQL身份驗證,1個用於Windows身份驗證,即如何添加條件。 – 2011-09-14 10:25:17

+0

此代碼是否可以工作?設置LogonAsService特權*和*服務標識似乎沒有按順序排列在生成的.msi包中。出於這個原因,安裝失敗...或者我錯過了什麼? – 2012-10-17 15:36:20

相關問題