簡體   English   中英

Wix Burn:安裝MsuPackage后如何重啟

[英]Wix Burn: How to reboot after installing a MsuPackage

我目前有一個場景,我需要使用刻錄執行以下操作

  1. 安裝Windows映像組件
  2. 安裝Windows Installer 4.5
  3. 安裝.Net 4 Web
  4. 運行我的安裝程序(使用Wix 3.6創建)

我想知道在安裝MsuPackage后是否有辦法強制重啟...

在我的方案中,當引導程序在Windows Vista上安裝Windows6.0-KB942288-v2-x86.msu並隨后嘗試安裝.Net Framework而不重新啟動時會拋出錯誤:0x8007064d - Windows安裝程序無法安裝此安裝包服務...

如果我在錯誤后重新啟動並再次運行安裝程序它可以正常工作。 請注意,使用ExePackage可以指定InstallCommand以及ExitCode,如何在MsuPackage中實現相同的行為?

請參閱下面我的wxs文件的內容:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Bundle Name="$(var.MyProject.ProjectName)" Version="2.6.0.0" Manufacturer="Awesome Software (Pty) Ltd" UpgradeCode="6a77118d-c132-4454-850b-935edc287945">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication
        LicenseFile="$(var.SolutionDir)Awesome.EULA\Awesome CE Eula.rtf"
        SuppressOptionsUI="yes"/>
    </BootstrapperApplicationRef>

    <util:FileSearch Path="[SystemFolder]\windowscodecs.dll" Variable="windowscodecs" Result="exists" />

    <Chain>
      <!-- Windows Imaging Component-->
      <ExePackage Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
        SourceFile="redist\wic_x86_enu.exe"
        DownloadUrl="http://download.microsoft.com/download/f/f/1/ff178bb1-da91-48ed-89e5-478a99387d4f/wic_x86_enu.exe"
        InstallCondition="VersionNT &lt; v5.2 AND NOT VersionNT64"
        DetectCondition="windowscodecs"
        InstallCommand="/quiet /norestart">
      </ExePackage>
      <ExePackage Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
        SourceFile="redist\wic_x64_enu.exe"
        DownloadUrl="http://download.microsoft.com/download/6/4/5/645FED5F-A6E7-44D9-9D10-FE83348796B0/wic_x64_enu.exe"
        InstallCondition="VersionNT &lt; v5.2 AND VersionNT64"
        DetectCondition="windowscodecs"
        InstallCommand="/quiet /norestart">
      </ExePackage>
      <!-- Windows Installer 4.5 -->
      <ExePackage Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
          SourceFile="redist\WindowsXP-KB942288-v3-x86.exe"
          DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsXP-KB942288-v3-x86.exe"
          InstallCondition="VersionNT=v5.1 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
          InstallCommand="/quiet /norestart">
        <ExitCode Behavior="forceReboot"/>
      </ExePackage>
      <ExePackage Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
          SourceFile="redist\WindowsServer2003-KB942288-v4-x86.exe"
          DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsServer2003-KB942288-v4-x86.exe"
          InstallCondition="VersionNT=v5.2 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
          InstallCommand="/quiet /norestart">
        <ExitCode Behavior="forceReboot"/>
      </ExePackage>
      <ExePackage Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
          SourceFile="redist\WindowsServer2003-KB942288-v4-x64.exe"
          DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsServer2003-KB942288-v4-x64.exe"
          InstallCondition="VersionNT=v5.2 AND VersionNT64 AND VersionMsi &lt; v4.5"
          InstallCommand="/quiet /norestart">
        <ExitCode Behavior="forceReboot"/>
      </ExePackage>
      <MsuPackage Cache="no" Compressed="no" Permanent="yes" Vital="yes" KB="KB942288" 
          SourceFile="redist\Windows6.0-KB942288-v2-x86.msu"
          DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x86.msu"
          InstallCondition="VersionNT=v6.0 AND NOT VersionNT64 AND VersionMsi &lt; v4.5">
      </MsuPackage>
      <MsuPackage Cache="no" Compressed="no" Permanent="yes" Vital="yes" KB="KB942288"
          SourceFile="redist\Windows6.0-KB942288-v2-x64.msu"
          DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x64.msu"
          InstallCondition="VersionNT=v6.0 AND VersionNT64 AND VersionMsi &lt; v4.5">
      </MsuPackage>
      <PackageGroupRef Id="NetFx40Web"/>
      <RollbackBoundary />
      <MsiPackage Id="MaxCut" SourceFile=".\StagingBundle\Awesome.msi" DisplayInternalUI="no"/>
    </Chain>
  </Bundle>
</Wix>

將自動檢測MsuPackage重新啟動。 你安裝的MSU可能已經說它需要重啟(日志文件應該說一些,IIRC),但不需要強制重啟。 已經要求Burn有一種方法可以將“需要重新啟動”提升到“現在重新開始,如果此時需要重新啟動”鏈中。 不幸的是,此時此功能尚不存在。

但是,您可以通過從OnExecutePackageComplete()回調返回IDRESTART ,在自定義BootstrapperApplication中實現“立即強制重啟”行為。 在有人實現該功能之前,這是唯一的選擇。

我最近需要這樣做,並且不想為每個MSU編寫一個bootstrapper應用程序或創建額外的bootstrapper EXE

作為一種解決方法,我添加了一個不執行任何操作的可執行文件(NOP.EXE),以便在MsuPackage之后運行並使用ExitCode強制重新啟動。

您需要使用相同的DetectCondition同時為MsuPackageExePackage

您可以在多個MsuPackages之后使用相同的可執行文件

所以像......

  <Fragment>
    <util:FileSearch Path="PathToSomeDotNetDll" Result="version" Variable="DotNetVersionCheck" />
    <PackageGroup Id="net45_x86">
      <MsuPackage Cache="no"
                  Compressed="no"
                  DetectCondition="DotNetVersionCheck &gt;= v4.5"
                  Permanent="yes"
                  Vital="yes"
                  KB="KB942288"
                  SourceFile="redist\Windows6.0-KB942288-v2-x86.msu"
                  DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x86.msu"
                  InstallCondition="VersionNT=v6.0 AND NOT VersionNT64 AND VersionMsi &lt; v4.5">
      </MsuPackage>
      <!-- Trick the bootstrapper into rebooting now by running an executable that does nothing and set ExitCode to force a reboot -->
      <ExePackage SourceFile="bin\nop.exe"
                  DisplayName="Reboot required after KB942288"
                  DetectCondition="DotNetVersionCheck &gt;= v4.5"
                  InstallCommand="nop.exe"
                  InstallCondition="VersionNT=v6.0 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
                  Permanent="yes">
        <ExitCode Behavior="forceReboot"/>
      </ExePackage>
    </PackageGroup>
  </Fragment>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM