Sam*_*Dev 1 installation windows-services wix
我正在尝试设置安装 Windows 服务并处理升级和更新的 WiX 安装程序。
安装程序就像一个魅力,用户在LocalSystem帐户下安装服务,然后服务工程师必须为该服务分配一个域帐户。
这是我的服务安装程序组件:
<Component Id="my_exe_Component">
<File Id="Myexe" Source="$(var.Myproject.TargetPath)" KeyPath="yes" />
<ServiceInstall Id="my_exe" Type="ownProcess" Vital="no" Name="NME" DisplayName="My intaller" Description="My installer description" Start="auto" Account="LocalSystem" ErrorControl="ignore" Interactive="no">
<util:ServiceConfig
FirstFailureActionType="restart"
SecondFailureActionType="restart"
ThirdFailureActionType="restart"
RestartServiceDelayInSeconds="0"
ResetPeriodInDays="1"/>
</ServiceInstall>
<ServiceControl Id="my_exe" Stop="both" Remove="uninstall" Name="NME" Wait="yes" />
</Component>
Run Code Online (Sandbox Code Playgroud)
当我对安装程序执行升级时,设置为服务的帐户会被覆盖回LocalSystem帐户,在执行升级时如何保留设置为我的服务的帐户?
我的升级条款是这样设置的:
<MajorUpgrade AllowSameVersionUpgrades="yes" AllowDowngrades="no" DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallExecute" />
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
这是一个经典的真理来源问题。MSI 希望成为事实的来源,并且在其代码中没有任何内容来说明这种情况。它认为服务应该是 LocalSystem,所以它想修复它。(这不仅仅是升级……维修也会做同样的事情。)
那么该怎么办?
选项A:
将用户名/密码配置带入 MSI。UI 工作、凭证验证和凭证加密将其保存在机器上的某处,以便后续交易可以解密和重用凭证。
注:风险。凭证可以进行逆向工程.. 我得到了消息...... Windows LSA 机密和应用程序池身份等也可以。
选项 B:
使用自定义操作来创建服务。通过这种方式,您可以执行逻辑以在后续事务期间不接触服务。
选项 C:
将条件表达式放在 CreateServices 标准操作上,以仅在首次安装时应用,而不是在重大升级时应用。
风险:如果您更改了有关服务的任何其他内容,则不会通过升级来部署它,因为它已被绕过。这也适用于您的 MSI 中的所有服务,而不仅仅是这一服务。
选项 D:
拥抱作为内置服务帐户运行,并使用活动目录权限授予该计算机对象对其连接的任何对象的权限。
选项 E:
如果用户在安装后应用凭据,则他们可以在升级后再次执行此操作。他们可以处理。
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |