安装程序无法在User下启动该服务

时间:2011-07-14 11:02:43

标签: service installer wix

安装程序安装Windows服务。 我向用户提供表单以选择其中一个帐户来启动服务:

  1. 本地服务
  2. 本地系统
  3. 网络系统
  4. 用户帐户
  5. 当我选择用户并在安装过程中输入Domain \ Administrator account + pwd时,无法启动服务。

    当我选择本地服务时,它开始正常。在此之后,我可以手动将帐户更改为相同的域\管理员帐户,它开始正常。 为何如此不同的行为? 如何在任何用户帐户下安装期间启动服务?

3 个答案:

答案 0 :(得分:2)

查看Util Extensions User元素。您可以将CreateUser属性设置为no,将Name属性设置为UI中用于UserName Input的[PROPERTY],将LogonAsService属性设置为yes。这将指示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>

答案 1 :(得分:1)

您需要确保所选用户帐户有权log on as a service。如果您是管理员,则无法为用户安装服务而无需向他提供正确的登录。

如果设置此策略有效,则还需要在安装期间动态执行此策略。解决方案是使用ntrights.exe作为自定义操作。此自定义操作可以使用包含用户帐户信息的自定义属性。

答案 2 :(得分:1)

如果有人想知道为什么来自@Christopher Painter的代码他的答案没有用。我有类似的代码,但没有使用错误1923。

  

错误1923.服务&#39;&#39; ()无法安装。验证您是否具有足够的权限来安装系统服务。   MSI(s)(10:08)[15:55:00:161]:产品:&#39;&#39; (64位) - 错误1923.服务&#39;&#39; ()无法安装。验证您是否具有足够的权限来安装系统服务。

直到我发现 services.msc对话框需要在安装期间关闭

不知道为什么,但它确实有效。 在开发服务期间.msc一直是开放的,所以我从来没有注意到。