WiX ServiceInstall - 将服务设置为以当前Windows用户身份运行
您需要同时拥有要运行该服务的用户的帐户名和密码。我可以通过向我的安装程序添加一个自定义用户界面来请求用户名和密码,然后使用ServiceInsall元素上的帐户和密码属性提供的值完成此操作。
请注意,用于运行服务的帐户必须具有“登录身份”服务特权。默认情况下,这不会授予用户。我能够使用UtilExtension架构中的用户元素将此priveledge添加到用户。如果运行安装程序的用户是管理员,则仅向用户添加特权才会成功。
这是我使用的代码。 SERVICECREDENTIALS_USERLOGIN和SERVICECREDENTIALS_PASSWORD是从自定义用户界面填充的属性。
<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>
你能帮我吗?我如何拥有2个组件1用于SQL身份验证,1个用于Windows身份验证,即如何添加条件。 – 2011-09-14 10:25:17
此代码是否可以工作?设置LogonAsService特权*和*服务标识似乎没有按顺序排列在生成的.msi包中。出于这个原因,安装失败...或者我错过了什么? – 2012-10-17 15:36:20
为什么要以当前用户身份运行服务?服务的大部分要点是在没有用户登录的情况下运行 - 并且能够以LocalSystem的身份运行,以便于可执行文件的管理员权限。我相信你有一个很好的理由...... – 2009-10-02 04:26:36
你为什么要将它作为特定用户来运行的一个原因是它需要连接到SQL服务器,并且SQL服务器被配置为使用Windows身份验证......它更容易没有将“本地服务”添加到SQL用户列表中。 – 2010-09-07 08:37:06