WiX-升级服务

WiX-升级服务,wix,installation,Wix,Installation,我在1.0.0.0版本中安装了我的应用程序。已在用户帐户上安装服务(使用用户名/密码) 如何进行更新,以便用户不必再次指定登录名和密码 <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />   <Component Id="MyService" Guid="MyGUID" Win64="yes">     <Fi

我在1.0.0.0版本中安装了我的应用程序。已在用户帐户上安装服务(使用用户名/密码)

如何进行更新,以便用户不必再次指定登录名和密码

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

      <Component Id="MyService" Guid="MyGUID" Win64="yes">
        <File Id="FileID" Name="MyService.exe" Source="Path\MyService.exe" KeyPath="yes" />
      
        <ServiceInstall Id="InstallService"
                        Type="ownProcess"
                        Name="SERVICENAME"
                        DisplayName="XXX"
                        Description="XXX XXX"
                        Account="NT SERVICE\XXXACCOUNT"
                        ErrorControl="normal"
                        Start="auto" />
      
        <ServiceControl Id="Controlervice" Name="SERVICENAME" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
      </Component>

  
    
  
    
  
    
  
我试过:

<InstallExecuteSequence>
    <!-- Without overwriting the service configuration -->
    <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices> 
</InstallExecuteSequence>

    
不升级产品代码

但它不起作用

如果在升级设置中使用该条件,则该条件不正确。UPGRADINGPRODUCTCODE是在正在替换和卸载的旧的已安装产品中设置的,而不是在新的传入升级中设置的。为此,您需要upgrade元素的属性,如果您使用MajorUpgrade元素,将检测到WIX_upgrade_。然而

现在影响旧产品的卸载(在升级时)已经太迟了,因为它的DeleteServices已经在卸载中,准备好了,并且您无法从新的升级安装中阻止它的发生。如果您在较旧的安装中具有DeleteServices条件,这样它就不会作为升级卸载的一部分进行删除,那么它就有可能工作。如果有多个服务,人们通常不会这样做,因为它会影响所有服务

通常,人们通过将凭据保存并加密到某个位置来实现这一点,这样就可以将凭据还原到具有帐户名和密码的属性中,以便在升级、修补、修复等过程中恢复凭据。如果您没有保存凭据,现在修复它们可能为时已晚。例如,如果对较旧的已安装产品进行维修,会发生什么情况?它是再次请求凭据还是失败?或者恢复服务以使用默认帐户运行

从长远来看,将这些凭证存储在某个地方是人们采取的方法,Win32 CredWrite和CredRead以及托管代码等价物比注册表更安全

我不认为有一个解决方案为您提供了张贴的信息。如果我理解正确,那么旧的卸载将无条件地调用DeleteServices,除非您更新旧产品(例如使用补丁)以防止DeleteServices,否则您无法阻止删除。然后在即将到来的升级中,您需要跳过调用InstallServices。并且完全确保服务二进制文件将位于完全相同的位置(可能不是可浏览的应用程序目录!),因为您不希望旧安装创建的服务设置引用升级可能安装到不同位置的二进制文件