【发布时间】:2015-01-15 02:45:58
【问题描述】:
我正在使用 WiX 开发 MSI 安装程序。我试图让这个开发尽可能简单:这是一个内部产品,我的用户是我们的 IT 人员。
该产品包含一个 Windows 服务,必须将其配置为在每台机器的不同帐户下运行。
我为我的用户(首次安装)计划的工作流程如下:
- 运行安装程序 (安装程序在默认帐户下设置服务)
- 通过
sc或本地服务小程序停止服务 - 更新服务属性以在正确的机器特定帐户下运行。 (每台机器的账户不同,只有 IT 人员可以访问密码。)
- 重启服务
后续更新将包括从更新的 MSI 文件进行安装。
测试“小”更新时,我惊讶地发现安装程序将服务重置为在默认帐户下运行。这对我来说是一个主要问题,因为它让我的用户很难更新他们的服务器。每次有更新时,他们都必须在每台机器上重新输入帐户信息。我预计这会发生在“主要”更新中,但不会发生在“小”更新中。
有没有办法配置安装程序,使其在“小”或“次要”更新期间不会更改服务的现有帐户/密码配置? p>
在“修复”期间是否也会发生这种情况(我没有尝试过)?
这是我的组件在 .wxs 文件中的样子:
<Component Id="cmpService" Guid="{MYGUIDHERE}">
<File Id="filService" KeyPath="yes" Name="ServiceApp.exe" />
<ServiceInstall Id="ServiceInstall" Name="ServiceApp" DisplayName="My Service"
Type="ownProcess" Start="auto" ErrorControl="normal"
Account="LocalSystem">
<util:PermissionEx ... attributes here... />
</ServiceInstall>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall"
Name="ServiceApp" Wait="yes" />
</Component>
我曾预计Remove="uninstall" 会在没有更改的情况下保留服务。显然不是。 (如果这发生在“主要”更新中,我不会太担心)。
我还注意到ServiceConfig 元素具有似乎符合要求的属性 (OnReinstall),但根据烛形错误消息,很明显OnReinstall 旨在仅影响元素(PreShutdownDelay 等)而不是整个服务安装。
我已经研究过这些:
- Let the user specify in which account a service runs
- WiX MajorUpgrade of Windows Service, preserving .config, and avoiding a reboot
- How to only stop and not uninstall windows services when major upgrade in wix?
奇怪的是,this answer 暗示这只是“重大”升级的问题。那不是我的经验。我的经历是侥幸吗?
在安装过程中提示输入帐户和密码本来可以,但在这种情况下,将密码存储在注册表或其他地方并不是一个真正的选择,并且每次更新都必须重新输入凭据与必须手动重新配置服务。
【问题讨论】:
-
你有没有深入了解这个?
-
你得到这个答案了吗?面临同样的问题..任何线索都会很棒...
-
@user2717225,我没有其他线索。我们不必发布很多更新,所以这对我们来说并不像我担心的那么重要。这很麻烦。
标签: wix