我有一个服务要由我的安装程序安装。在 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 安装并手动更改服务的登录凭据时,它会成功启动。