WiX ServiceInstall - 将服务设置为以当前Windows用户身份运行

时间:2009-09-28 15:18:39

标签: wix serviceinstall

我正在使用WiX安装Windows服务。如何在运行安装程序的Windows用户的上下文中运行服务?

1 个答案:

答案 0 :(得分:22)

您需要同时拥有要运行服务的用户的帐户名和密码。我能够通过向安装程序添加自定义UI来获取用户名和密码,然后使用ServiceInsall元素上的Account和Password属性提供的值来实现此目的。

请注意,用于运行服务的任何帐户都需要具有特权登录服务。默认情况下,这不会授予用户。我能够使用UtilExtension架构中的User元素将此priveledge添加到用户。只有在运行安装程序的用户是管理员时,才能成功向用户添加权限。

这是我使用的代码。 SERVICECREDENTIALS_USERLOGIN和SERVICECREDENTIALS_PASSWORD是从自定义UI填充的属性。

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
  <File Id="ServiceEXE" Name="YourService.exe" DiskId="1"
        Source="path\to\YourService.exe" KeyPath="yes" />
  <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]"
             LogonAsService="yes" />
  <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService"
                  DisplayName="Your Service" Description="Your Service description"
                  Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]"
                  ErrorControl="normal" Interactive="no" />
  <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" />
</Component>