2011-07-14 58 views
0

安裝程序安裝Windows服務。 我提供形式用戶可以選擇其中一個帳戶來啓動服務:安裝程序無法啓動用戶下的服務

  1. 本地服務
  2. 本地系統
  3. 網絡系統
  4. 用戶帳戶

當我選擇用戶和在安裝過程中輸入Domain \ Administrator帳戶+密碼,服務無法啓動。

當我選擇本地服務時,它開始正常。在此之後,我可以手動更改賬戶到相同的域\管理員帳戶,並開始確定。 爲什麼這樣不同的行爲? 如何在任何用戶帳戶的安裝過程中啓動服務?

回答

2

查看Util擴展用戶元素。您可以將CreateUser屬性設置爲no,將Name屬性設置爲用戶界面中用於輸入用戶名並將LogonAsService屬性設置爲yes的[PROPERTY]。這將指示WiX向您的用戶授予LogOnAsService權限,而無需編寫自定義操作來調用ntrights.exe。

以下是樣本的要求:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product Id="*" Name="Setup" Language="1033" Version="1.0.0.0" Manufacturer="test" UpgradeCode="5c6b0f52-d024-4f1b-bfae-2dbb96b3ef15"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate EmbedCab="yes" /> 
    <UIRef Id="WixUI_Minimal" /> 
    <Feature Id="ProductFeature" Title="Setup" Level="1"> 
     <ComponentRef Id="serviceComponent" /> 
    </Feature> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="Setup"> 
      <Component Id="serviceComponent" Guid="380bbddd-daa7-0744-517b-37da768f5570"> 
      <File Id="serviceFile" Source="$(var.WindowsService.TargetPath)" KeyPath="yes" /> 
      <ServiceInstall Id="serviceInstall" Name="WindowsService" DisplayName="WindowsService" Start="auto" Type="ownProcess" ErrorControl="ignore" Account=".\serviceaccount" Password="p2Ekutrekac34ph2" /> 
      <ServiceControl Id="serviceControl" Name="WindowsService" Start="install" Stop="both" Remove="both" Wait="no" /> 
       <util:User Id="user" CreateUser ="yes" Name ="serviceaccount" Password="p2Ekutrekac34ph2" LogonAsService="yes" UpdateIfExists="yes" RemoveOnUninstall="yes" PasswordNeverExpires="yes" FailIfExists="no" Domain="[ComputerName]" CanNotChangePassword="yes" Disabled="no" PasswordExpired="no"/> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 
    </Product> 
</Wix> 
+0

這真的有用嗎?我無法在安裝該服務的同時使其工作,因爲設置權限似乎被安排爲自定義操作,因此,在Wix嘗試安裝該服務之後發生。還是我想念somtehing? –

+0

我已經在乾淨的VM快照上測試過了,並沒有任何問題。 –

+0

您的意思是您可以將權限設置爲用戶帳戶,並在相同的.msi/Wix安裝中安裝該服務。請,你能和我分享你的代碼嗎?我在那裏問了一個類似的問題:http:// stackoverflow。com/questions/12949478/is-using-utiluser-logonasservice-and-serviceinstall -with-same-wix-component –

1

您需要確保所選用戶帳戶有權使用log on as a service。無論您是否是管理員,都無法爲用戶安裝服務,而無需向他提供正確的日誌。

如果設置此策略有效,您還需要在安裝過程中動態執行此操作。解決方案是使用ntrights.exe作爲自定義操作。此自定義操作可以使用包含用戶帳戶信息的自定義屬性。

1

如果有人想知道爲什麼從@Christopher畫家的代碼他的答案沒有工作。我有類似的代碼,沒有與錯誤1923工作。

錯誤1923.服務''()無法安裝。驗證您是否有足夠的權限來安裝系統服務。 MSI(10:08)[15:55:00:161]:產品:''(64位) - 錯誤1923.服務''()無法安裝。驗證您是否有足夠的權限來安裝系統服務。

直到我發現安裝期間需要關閉services.msc對話框

不知道爲什麼,但它的工作原理。 在開發過程中,services.msc一直開放,所以我從來沒有注意到。

+0

有趣。服務管理單元可能會鎖定服務控制管理器apis。我從來沒有聽說過這個。好的瑣事讓我測試一天。你使用的是哪個版本的Windows? –

+0

使用Windows 10 x64 Pro Anniv.Update。 如果您在Bing上搜索一下,您會發現其他人在過去遇到同樣的問題。例如請參閱:https://conetrix.com/Blog/close-servicesmsc-window-to-add-or-remove-services – juFo

相關問題