重大升级,而无需卸载Windows服务



我真的很抱歉多余。我已经检查了本网站本身以及其他一些网站中的许多其他帖子。我无法在没有卸载的情况下进行大规模升级工作。重新安装服务。我正在更改产品代码和版本,而升级FileComponent是升级的一部分的组件。所有其余的都与1.0.0中的相同。我正在做一个POC,因此只想做出这种小的更改(不是作为补丁,而是作为重大升级)。以下是我的product.wxs。我不包括其他内容,例如ServiceAccountdlg,variables.wxi或en-us.wxl,因为它可能会使它确实很长。谁能帮帮我吗?我已经尝试了Wix_upgrade_detected,upgradingProductCode等,但无法使其正常工作。每次,服务都会被卸载和重新安装。我正在通过以下方式对此进行验证。服务启动后,它将在ProgramData中创建一个日志文件,并将其附加到每5秒钟。在卸载MSI期间,我正在删除此日志文件及其文件夹。重新安装服务并重新启动后,日志文件再次创建。因此,我能够弄清楚该服务始终通过主要升级而重新安装。我只希望在不重新安装服务或卸载的任何其他组件的情况下部署新文件。我从一些人那里听说,只有在发生更改时,工具集检查更改的文件并重新安装它们。但这似乎并非如此。我尝试使用具有各种值的时间表属性,但没有运气。任何帮助都会很棒。我已经尝试了很多天了,没有任何运气。请让我知道我是否需要更多信息。

<?xml version="1.0" encoding="UTF-8"?>
<?include Variables.wxi ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'>
  <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="!(loc.LANG)" Version="$(var.ProductVersion)" Manufacturer=" MyCompany" UpgradeCode="$(var.UpgradeCode)">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Id="*" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <!--<Upgrade Id="$(var.UpgradeCode)">
      <UpgradeVersion OnlyDetect="yes" Minimum="1.0.0" Maximum="2.0.0" IncludeMinimum="yes" IncludeMaximum="yes" Property="NEWERFOUND"   />
    </Upgrade>-->
    <InstallExecuteSequence>
      <!--<RemoveExistingProducts After="InstallExecute" />
      <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>-->
      <!--<InstallServices>NOT UPGRADINGPRODUCTCODE,NOT WIX_UPGRADE_DETECTED</InstallServices>-->
      <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
    </InstallExecuteSequence>
    <Condition Message='This application only runs on Windows 7 or higher OS versions.'>
      <![CDATA[Installed OR (VersionNT64 >= 601)]]>
    </Condition>
    <MediaTemplate />
    <Property Id="MSIFASTINSTALL" Value="1"/>
    <Property Id="MsiLogging" Value="v" />
    <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" />
    <Property Id="INSTALLDIR">
      <RegistrySearch Id='MyCompanyMSISampleRegistry' Type='raw' Root='HKLM' Key='SOFTWAREMyCompanyCustomApp' Name='INSTALLDIR' Win64='yes' />
    </Property>
    <WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
    <Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.'
    Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no' InstallDefault='local' Absent='disallow'>
      <Feature Id="FileFeature" Title="File Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'>
        <ComponentRef Id="FileComponent"/>
        <ComponentRef Id="UpgradeFileComponent"/>
      </Feature>
      <Feature Id="ServiceFeature" Title="Service Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'>
        <ComponentRef Id="ServiceComponent"/>
        <ComponentRef Id="deleteFolder"/>
      </Feature>
      <Feature Id="RegistryFeature" Title="Registry Feature" Level="1" AllowAdvertise='no' InstallDefault='local' Absent='disallow' Display='expand'>
        <ComponentRef Id="RegistryComponent"/>
      </Feature>           
      <Feature Id='Documentation' Title='Description' Description='The instruction manual.' Level='2' AllowAdvertise='no' InstallDefault='followParent' Absent='disallow'>
        <ComponentRef Id='Manual' />
      </Feature>
    </Feature>
    <!--<UIRef Id="WixUI_Mondo"/>
    <UIRef Id="WixUI_ErrorProgressText" />-->
    <UI Id="MyWixUI_Mondo">
      <UIRef Id="WixUI_Mondo" />
      <DialogRef Id="ServiceAccountDlg" />
      <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="ServiceAccountDlg" Order="2">LicenseAccepted = "1"</Publish>
      <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="ServiceAccountDlg">1</Publish>
    </UI>
    <UIRef Id="WixUI_ErrorProgressText" />
    <Icon Id="MyCompanyBanner.ico" SourceFile="BinaryMyCompanyBanner.ico" />
  </Product>
  <Fragment>
    <Component Id='Manual' Guid='7470A2CD-B07C-4AB4-9152-8C6AA53FA0F7' Directory='INSTALLDIR'>
      <File Id='Manual' Name='Manual.pdf' DiskId='1' Source='1.0.0Manual.pdf' KeyPath='yes'>
        <Shortcut Id="startmenuManual" Directory="DesktopFolder" Name="Instruction Manual" Advertise="yes" />
      </File>
    </Component>
  </Fragment>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLDIR" Name="$(var.InstallFolderName)" />
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop" />
      <Directory Id="CommonAppDataFolder">
        <Directory Id="MyCompanyTestInstallerLogs" Name="MyCompanyTestInstallerLogs">
          <Component Id="deleteFolder" Guid="323549D2-90B7-4D5D-8A36-EEA0ACCCC35E">
            <RemoveFile Id="deleteServiceFile" Name="MyCompanyTestWinSvcLog.txt" On="both" Directory="MyCompanyTestInstallerLogs"/>
            <RemoveFolder Directory="MyCompanyTestInstallerLogs" Id="MyCompanyTestInstallerLogs" On="both"/>
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>
  <Fragment>
    <Component Id="FileComponent" Directory="INSTALLDIR" Guid="F143BE3C-48D6-4138-B4E6-5CF44773CBA5" >      
      <File Id="SampleTextFile.txt" Name="Sample.txt" Source="$(var.Version)Sample.txt" KeyPath="yes">
        <Shortcut Id="startmenuSampleText" Directory="DesktopFolder" Name="MyCompany MSI Sample" WorkingDirectory='INSTALLDIR' Icon='MyCompanyBanner.ico' Advertise='yes' />
      </File>
    </Component>
  </Fragment>
  <Fragment>
    <Component Id="UpgradeFileComponent" Directory="INSTALLDIR" Guid="4582597C-2CE0-451E-8B89-83BA4ABCE464">    
      <File Id="SampleXMLFile.xml" Name="Sample.xml" Source="$(var.Version)Sample.xml" KeyPath="yes" />
    </Component>
  </Fragment>
  <Fragment>
    <Component Id='ServiceComponent' Directory="INSTALLDIR" Guid="AEA0E53F-3D70-4010-8592-9A01FE49344D">
      <util:User Domain="[DOMAIN]" Id="svcUser" Name="[USER_NAME]" Password="[PASSWORD]" LogonAsService="yes" CreateUser="no"/>
      <File Id='MyCompanyTestWinSvc' Name='MyCompanyTestWinSvc.exe' Source='BinaryMyCompanyTestWinSvc.exe' KeyPath='yes' />
      <ServiceInstall Id="installMyCompanyTestWinSvc" Name="MyCompanyTestWinSvc" DisplayName="MyCompany Install Test Windows Service" Start="auto" ErrorControl="normal" Type="ownProcess" Account="[DOMAIN][USER_NAME]" Password="[PASSWORD]" />
      <ServiceControl Id="sc_MyCompanyTestWinSvc" Name="MyCompanyTestWinSvc" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
      <ServiceControl Id="stopAndStartIIS" Name="IISADMIN" Start="uninstall" Stop="install" Wait="yes" />
      <ServiceControl Id="stopAndStartSQL" Name="MSSQLSERVER" Start="uninstall" Stop="install" Wait="yes" />
    </Component>
  </Fragment>
  <Fragment>
    <Component Id="RegistryComponent" Directory="INSTALLDIR" Guid="8D8D93A4-09F5-4511-B291-720A7BC70529">
      <RegistryValue Root='HKCU' Key='Software[Manufacturer][ProductName]' Type='string' Value='' KeyPath='yes' />
    </Component>
  </Fragment>
</Wix>

您的MarialUpgrade未指定其计划的位置。正如文档所说,默认值是在安装插图之后,"该计划在安装升级产品之前完全删除了已安装的产品。"因此,您的主要升级将完全卸载旧产品,删除服务,然后安装升级。

因此,您应该首先要安排重大升级后,因为这将表现得像现有已安装产品之上的更新,并且参考计数应最大程度地减少对服务的中断。这意味着您必须遵循组件规则,并增加需要替换版本的文件的文件版本。

话虽如此,升级始终是对较旧产品的卸载,因此该较旧版本的ServiceControl将运行,并且删除="两个"可能是问题,在升级过程中删除了服务。因此,原始的Wix ServiceControl很重要。

另外,如果尚未遵守组件规则,则插入后的升级后会正常工作,因为它可以卸载所有内容,然后安装新产品。但是,如果在升级后尚未遵守组件规则,那么服务组件可能会被卸载(由于组件ID的不同),并且很可能还有其他效果不遵守规则。

,为了清楚起见,您不需要在新安装中删除服务的条件。我将首先在一个更好的位置对主要升级进行排序。同样,在新升级中,升级生产代码作为条件绝对没有效果。如果升级将其卸载,则该属性将在较旧的产品中设置。如果您想使用此属性,它应该在已经安装的原始产品中,因此,如果它已发货并安装,现在更改该代码(没有补丁程序等)为时已晚。

更详细的MSI日志将显示有关正在发生的事情以及以什么顺序将字符串指定为VoiceWarmup的详细信息。

我将其添加到我的 <InstallExecuteSequence>

<!-- http://stackoverflow.com/questions/15965539/how-to-only-stop-and-not-uninstall-windows-services-when-major-upgrade-in-wix don't change service config on upgrade -->
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>            
<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices>

似乎对我有用,但是由于产品的变化,我不再使用它。您必须确保不会更改版本之间的服务配置,因为当您更改配置时,您 do 需要在升级期间卸载并安装服务。

服务仅在实际UnInstall上删除(ROB [评论问题的答案]注意,您不需要在删除状态周围条件条件,因为在组件中注明了安装/卸载服务状态)

,我们仅在第一个安装上安装服务。

相关内容

  • 没有找到相关文章

最新更新