0

我有一个服务要由我的安装程序安装。在 UI 上,用户可以选择将此服务安装为 LocalSystem 或使用指定的用户凭据。我的 Wix 代码如下所示:

<Component Id="C.MyService.exe" Guid="{Guid}">
        <File Id="MyService.exe" Name="MyService.exe" KeyPath="yes" Vital="yes"
              Source="MyServicePath" />
        <ServiceInstall Id="MyServiceInstall" DisplayName="[SERVICE_NAME]" Account="[SERVICE_ACCOUNT]" Password="[SERVICE_PASSWORD]" Name="[SERVICE_NAME]" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" Interactive="no">
        </ServiceInstall>
        <ServiceControl Id="MyServiceStart" Name="[SERVICE_NAME]" Start="install" Wait="no" />
        <ServiceControl Id="MyServiceStop" Name="[SERVICE_NAME]" Stop="both" Wait="yes" />
        <ServiceControl Id="MyServiceRemove" Name="[SERVICE_NAME]" Remove="uninstall" Wait="yes" />
      </Component>
      <Component Id="SetStartServicePermission" Guid="{Guid}">
        <CreateFolder/>
        <Condition>NOT USE_LOCALSYSTEM_ACCOUNT</Condition>
        <util:User Id="ServiceUser" Name="[SERVICE_ACCOUNT]" Password="[SERVICE_PASSWORD]" CreateUser="no" LogonAsService="yes" UpdateIfExists="yes" />
      </Component>

当我选择 LocalSystem 时,服务安装并正常工作。但是使用自定义用户凭据安装服务,但无法启动并出现错误“服务服务名称无法启动。验证您是否有足够的权限来启动系统服务”。自定义用户已经存在并且属于管理员组。当我使用 LocalSystem 安装并手动更改服务的登录凭据时,它会成功启动。

4

3 回答 3

1

仅出于完整性考虑 - 我成功使用以下代码授予 LogonAsService 权限:

<util:User Id="ProcessingServiceUser" Domain="[APP_USER_DOMAIN]" Name="[APP_USER_NAME]" Password="[APP_USER_PASSWORD]" CreateUser="no" LogonAsService='yes' UpdateIfExists='yes' />

所以 CreateUser 应该是 'no',但 UpdateIfExists='yes'。

尽管我认为这不是您的问题,因为您说用户已经拥有此权限。

您的安装程序是否以提升的权限启动?您安装到哪个操作系统版本?我想您创建了按用户安装,这样它就不会要求提升权限,但之后您会尝试启动服务。尝试从管理命令行 (msiexec /i YourInstaller.msi) 启动您的 MSI,而不是双击它。

于 2012-11-12T11:30:01.810 回答
0

您将 createuser 属性设置为 false。因此,WiX 不会创建/更新用户以授予 SeLogonAsService 权利。当您进入 Services.msc 并输入凭据时,它会隐含地为您执行此操作并开始工作。

于 2012-11-07T03:06:49.230 回答
0

固定的。我在 ServicePassword 属性名称中打印错误,并且安装程序为服务用户设置了空密码。

于 2013-01-30T10:56:42.670 回答