WiX ServiceInstall - 将服务设置为以当前 Windows 用户身份运行
Posted
技术标签:
【中文标题】WiX ServiceInstall - 将服务设置为以当前 Windows 用户身份运行【英文标题】:WiX ServiceInstall - setting the service to run as the current windows user 【发布时间】:2009-09-28 15:18:39 【问题描述】:我正在使用 WiX 安装 Windows 服务。如何使服务在运行安装程序的 Windows 用户的上下文中运行?
【问题讨论】:
为什么要以当前用户身份运行服务?服务的大部分要点是能够在没有用户登录的情况下运行 - 并且能够作为 LocalSystem 运行以促进可执行文件的管理员权限。我相信你有充分的理由...... 您以特定用户身份运行它的一个原因是它需要连接到 SQL Server,并且 SQL Server 配置为使用 Windows 身份验证...不必添加“本地服务”添加到 SQL 用户列表。 【参考方案1】:您需要拥有您想要运行服务的用户的帐户名和密码。我可以通过向我的安装程序添加一个自定义 UI 来要求用户名和密码,然后使用 ServiceInsall 元素上的 Account 和 Password 属性提供的值来完成此操作。
请注意,用于运行服务的任何帐户都需要具有“作为服务登录”权限。默认情况下不授予用户此权限。我能够使用 UtilExtension 架构中的 User 元素将此权限添加给用户。仅当运行安装程序的用户是管理员时,才能为用户添加特权。
这是我使用的代码。 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>
【讨论】:
你能帮助我如何拥有 2 个组件,1 个用于 SQL 身份验证,1 个用于 Windows 身份验证,即如何添加条件。 这段代码真的有效吗?设置 LogonAsService 权限 和 服务标识似乎没有在生成的 .msi 包中按顺序安排。由于这个原因,安装失败......或者我错过了什么?以上是关于WiX ServiceInstall - 将服务设置为以当前 Windows 用户身份运行的主要内容,如果未能解决你的问题,请参考以下文章
在wix中进行重大升级时如何只停止而不卸载Windows服务?