我的安装程序要安装服务。在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时,服务安装并正常工作。但是使用自定义用户凭据服务安装,但无法启动错误“Service ServiceName无法启动。验证您是否具有足够的权限来启动系统服务”。 自定义用户已存在且属于Administrators组。 当我使用LocalSystem安装并手动更改服务的登录凭据时,它会成功启动。
答案 0 :(得分: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,而不是双击它。
答案 1 :(得分:0)
您将createuser属性设置为false。因此,WiX不会创建/更新用户以使SeLogonAsService正确。当你进入Services.msc并输入信用证时,它隐含地为你做这件事并开始工作。
答案 2 :(得分:0)
固定。我在ServicePassword属性名称和安装程序中错误打印了服务用户的空密码。