Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 使用WiX工具集升级服务时不要覆盖服务帐户_Installation_Wix_Windows Services - Fatal编程技术网

Installation 使用WiX工具集升级服务时不要覆盖服务帐户

Installation 使用WiX工具集升级服务时不要覆盖服务帐户,installation,wix,windows-services,Installation,Wix,Windows Services,我正在尝试安装一个WiX安装程序,安装windows服务并处理升级和更新 安装程序就像一个魔咒,用户在LocalSystem帐户下安装服务,然后服务工程师必须为该服务分配一个域帐户 这是我的服务安装程序组件: <Component Id="my_exe_Component"> <File Id="Myexe" Source="$(var.Myproject.TargetPath)" KeyPath="yes" /> <ServiceInstall

我正在尝试安装一个WiX安装程序,安装windows服务并处理升级和更新

安装程序就像一个魔咒,用户在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>
当我对安装程序执行升级时,设置为服务的帐户将被覆盖回LocalSystem帐户,在执行升级时,如何将帐户集保留到我的服务

我的升级条款设置如下:

 <MajorUpgrade AllowSameVersionUpgrades="yes" AllowDowngrades="no" DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallExecute" />

任何帮助都将不胜感激。

这是一个典型的真相问题。MSI希望成为真相的来源,它的代码中没有任何东西可以解释这种情况。它认为服务应该是LocalSystem,因此希望修复它。这不仅仅是升级。。。修理也可以做同样的事情

那么,该怎么办

备选方案A:

将用户名/密码配置带入MSI。UI工作、凭证验证和凭证加密将凭证保存在计算机上的某个位置,以便后续事务可以解密和重用凭证

注:风险。信誉可以被反向工程。。不过我有个消息。。。windows LSA机密和应用程序池标识等也可以

备选案文B:

使用自定义操作创建服务。通过这种方式,您可以在后续事务中不接触服务

备选案文C:

将条件表达式放在CreateServices标准操作上,使其仅在首次安装期间应用,而不在主要升级期间应用

风险:如果您更改了该服务的任何其他内容,则不会通过升级进行部署,因为它已被绕过。这也适用于MSI中的所有服务,而不仅仅是这一项

备选案文D:

接受作为内置服务帐户运行,并使用active directory权限将该计算机对象权限授予其连接到的任何对象

备选案文E:


如果用户在安装后应用creds,那么他们只需在升级后再次应用即可。他们可以解决这个问题。

这是一个经典的真理问题。MSI希望成为真相的来源,它的代码中没有任何东西可以解释这种情况。它认为服务应该是LocalSystem,因此希望修复它。这不仅仅是升级。。。修理也可以做同样的事情

那么,该怎么办

备选方案A:

将用户名/密码配置带入MSI。UI工作、凭证验证和凭证加密将凭证保存在计算机上的某个位置,以便后续事务可以解密和重用凭证

注:风险。信誉可以被反向工程。。不过我有个消息。。。windows LSA机密和应用程序池标识等也可以

备选案文B:

使用自定义操作创建服务。通过这种方式,您可以在后续事务中不接触服务

备选案文C:

将条件表达式放在CreateServices标准操作上,使其仅在首次安装期间应用,而不在主要升级期间应用

风险:如果您更改了该服务的任何其他内容,则不会通过升级进行部署,因为它已被绕过。这也适用于MSI中的所有服务,而不仅仅是这一项

备选案文D:

接受作为内置服务帐户运行,并使用active directory权限将该计算机对象权限授予其连接到的任何对象

备选案文E:


如果用户在安装后应用creds,那么他们只需在升级后再次应用即可。他们可以处理。

现在无法回答,但是。这个和这个MSI是否只有一个服务?@ChristopherPaint是的,我有几个。现在无法回答,但是。这个和这个MSI是否只有一个服务?@ChristopherPaint是的,我有几个。谢谢你的详细回答,我很想选择B,不确定这是不是正确的选择!是的,这是用通常不赞成的自定义操作重新创建MSI,但在这种情况下,MSI并不能满足您的需要。只要彻底测试一下。安装、卸载、重新安装、修复和升级。感谢您提供的详细答案,我很想选择选项B,不确定它是否是正确的选择!是的,这是用通常不赞成的自定义操作重新创建MSI,但在这种情况下,MSI并不能满足您的需要。只要彻底测试一下。安装、卸载、重新安装、修复和升级。