安装程序安装Windows服务。 我向用户提供表单以选择其中一个帐户来启动服务:
当我选择用户并在安装过程中输入Domain \ Administrator account + pwd时,无法启动服务。
当我选择本地服务时,它开始正常。在此之后,我可以手动将帐户更改为相同的域\管理员帐户,它开始正常。 为何如此不同的行为? 如何在任何用户帐户下安装期间启动服务?
答案 0 :(得分:2)
查看Util Extensions User元素。您可以将CreateUser属性设置为no,将Name属性设置为UI中用于UserName Input的[PROPERTY],将LogonAsService属性设置为yes。这将指示WiX向您的用户授予LogOnAsService权限,而无需编写自定义操作来调用ntrights.exe。
以下是所要求的样本:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="Setup" Language="1033" Version="1.0.0.0" Manufacturer="test" UpgradeCode="5c6b0f52-d024-4f1b-bfae-2dbb96b3ef15">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<UIRef Id="WixUI_Minimal" />
<Feature Id="ProductFeature" Title="Setup" Level="1">
<ComponentRef Id="serviceComponent" />
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Setup">
<Component Id="serviceComponent" Guid="380bbddd-daa7-0744-517b-37da768f5570">
<File Id="serviceFile" Source="$(var.WindowsService.TargetPath)" KeyPath="yes" />
<ServiceInstall Id="serviceInstall" Name="WindowsService" DisplayName="WindowsService" Start="auto" Type="ownProcess" ErrorControl="ignore" Account=".\serviceaccount" Password="p2Ekutrekac34ph2" />
<ServiceControl Id="serviceControl" Name="WindowsService" Start="install" Stop="both" Remove="both" Wait="no" />
<util:User Id="user" CreateUser ="yes" Name ="serviceaccount" Password="p2Ekutrekac34ph2" LogonAsService="yes" UpdateIfExists="yes" RemoveOnUninstall="yes" PasswordNeverExpires="yes" FailIfExists="no" Domain="[ComputerName]" CanNotChangePassword="yes" Disabled="no" PasswordExpired="no"/>
</Component>
</Directory>
</Directory>
</Directory>
</Product>
</Wix>
答案 1 :(得分:1)
您需要确保所选用户帐户有权log on as a service。如果您是管理员,则无法为用户安装服务而无需向他提供正确的登录。
如果设置此策略有效,则还需要在安装期间动态执行此策略。解决方案是使用ntrights.exe作为自定义操作。此自定义操作可以使用包含用户帐户信息的自定义属性。
答案 2 :(得分:1)
如果有人想知道为什么来自@Christopher Painter的代码他的答案没有用。我有类似的代码,但没有使用错误1923。
错误1923.服务&#39;&#39; ()无法安装。验证您是否具有足够的权限来安装系统服务。 MSI(s)(10:08)[15:55:00:161]:产品:&#39;&#39; (64位) - 错误1923.服务&#39;&#39; ()无法安装。验证您是否具有足够的权限来安装系统服务。
直到我发现 services.msc对话框需要在安装期间关闭。
不知道为什么,但它确实有效。 在开发服务期间.msc一直是开放的,所以我从来没有注意到。