0

我正在使用 WiX 工具集 v3.10.0.1726

我有一个捆绑在引导程序中的 .msi 文件。

微星定义:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*"
           Name="$(var.ProductName)"
           Language="!(loc.ProductLanguage)"
           Version="!(bind.fileVersion.FILE)"
           Manufacturer="$(var.Manufacturer)"
           UpgradeCode="$(var.UpgradeCode)">
    <Package InstallerVersion="200"
             Compressed="yes"
             InstallScope="perMachine"
             Platform="x86"
             InstallPrivileges="elevated"
             ReadOnly="yes" />
    <MediaTemplate EmbedCab="yes" />

    <?include Feature.wxi?>

    <MajorUpgrade AllowDowngrades="no"
                  AllowSameVersionUpgrades="yes"
                  DowngradeErrorMessage="!(loc.DowngradeErrorMessage)" />

    <UI Id="UserInterface">
      <Property Id="WIXUI_INSTALLDIR"
                Value="TARGETDIR" />
      <Property Id="WixUI_Mode"
                Value="Custom" />

      <TextStyle Id="WixUI_Font_Normal"
                 FaceName="Tahoma"
                 Size="8" />
      <TextStyle Id="WixUI_Font_Bigger"
                 FaceName="Tahoma"
                 Size="9"
                 Bold="yes" />
      <TextStyle Id="WixUI_Font_Title"
                 FaceName="Tahoma"
                 Size="9"
                 Bold="yes" />

      <Property Id="DefaultUIFont"
                Value="WixUI_Font_Normal" />

      <DialogRef Id="ProgressDlg" />
      <DialogRef Id="ErrorDlg" />
      <DialogRef Id="FilesInUse" />
      <DialogRef Id="FatalError" />
      <DialogRef Id="UserExit" />

      <Publish Dialog="ProgressDlg"
               Control="Next"
               Event="EndDialog"
               Value="Return"
               Order="2" />
    </UI>
  </Product>
</Wix>

如果直接执行 .msi 文件,FilesInUse如果应用程序正在运行,对话框会正确显示。一切正常。

现在我已将 .msi 文件集成到引导程序中:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
  <Bundle Name="!(bind.packageName.Setup)"
          Version="!(bind.packageVersion.Setup)"
          Manufacturer="!(bind.packageManufacturer.Setup)"
          UpgradeCode="$(var.UpgradeCode)"
          DisableModify="yes">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
      <bal:WixStandardBootstrapperApplication LicenseUrl=""
                                              SuppressOptionsUI="no"
                                              ShowVersion="yes"
                                              SuppressRepair="yes"
                                              LogoFile="Resources/dpd.png" />
    </BootstrapperApplicationRef>
    <Chain DisableSystemRestore="yes">
      <MsiPackage Id="Setup"
                  Compressed="yes"
                  Name="$(var.ProductName)"
                  SourceFile="setup.msi"
                  DisplayInternalUI="yes"
                  Vital="yes" />
    </Chain>
  </Bundle>
</Wix>

我需要DisplayInternalUI,因为我在 .msi 文件中有一些额外的对话框,这些对话框对于设置是必需的。

如果应用程序未在升级方案中运行,则一切正常,而升级时正在运行的应用程序会使引导程序和 .msi 文件进入无响应状态。

日志的输出:

[2A34:28F0][2015-07-21T16:38:40]i001:刻录 v3.10.0.1726,Windows v6.1(Build 7601:Service Pack 1),路径:W:\work\SETUP.exe
.. .
[2A34:28F0][2015-07-21T16:38:40]i009:命​​令行:'-burn.unelevated BurnPipe。{571E9E94-4908-45EE-A6AC-05F923FAFDCF} {F7B2FBA0-BAEB-42C7-B1D5-B8704F153049 } 10904 /log log.txt'
...
[2A34:28F0][2015-07-21T16:38:41]i300:应用开始
...
[2A98:054C][2015-07-21T16:38:42] i301:应用执行包:设置,操作:安装,路径:C:\ProgramData\Package Cache{99D06386-9447-4D7B-8307-E53C12BB09B5}v2.0.19.28124\FOOAPPLICATION,参数:' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL= "7" INSTALLFOLDER="C:\FOOFOLDER" TRANSFORMS=":1031"'

以及 msi-log 的输出(至少是最后的相关行):

...
MSI (s) (24:D4) [16:38:42:826]:执行操作:InstallValidate
MSI (s) (24:D4) [16:38:42:827]:属性更改:删除 MsiRestartManagerSessionKey财产。它的当前值为'053651647df31e46971d3237c9eb6a06'。
MSI (s) (24:D4) [16:38:42:827]:转换表对话框。
...
MSI (s) (24:D4) [16:38:42:828]: 注意:1: 2205 2: 3: BindImage
MSI (s) (24:D4) [16:38:42:828] : 注意: 1: 2205 2: 3: ProgId
MSI (s) (24:D4) [16:38:42:828]: 注意: 1: 2205 2: 3: PublishComponent
MSI (s) (24:D4) [ 16:38:42:828]:注:1:2205 2:3:SelfReg
MSI (s) (24:D4) [16:38:42:828]:注:1:2205 2:3:扩展
MSI ( s) (24:D4) [16:38:42:828]:注:1:2205 2:3:字体
MSI (s) (24:D4) [16:38:42:828]:注:1:2205 2:3:
MSI (s) (24:D4) [16:38:42:828]:注: 1: 2205 2: 3: TypeLib
MSI (s) (24:D4) [16:38:42:829]: 注意: 1: 2205 2: 3: _RemoveFilePath
MSI (s) (24:D4) [16:38 :42:993]: 注意: 1: 1402 2: HKEY_CLASSES_ROOT.NET 3: 2
MSI (s) (24:D4) [16:38:43:127]: 注意: 1: 1402 2: HKEY_CLASSES_ROOT.NET 3: 2
MSI (s) (24:D4) [16:38:43:221]:属性更改:修改 CostingComplete 属性。它的当前值为“0”。它的新值:'1'。
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: BindImage
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: ProgId
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: PublishComponent
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: SelfReg
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: 扩展
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: 字体
MSI (s) (24:D4) [16:38 :43:222]: 注意: 1: 2205 2: 3: 类
MSI (s) (24:D4) [16:38:43:222]: 注意: 1: 2205 2: 3: TypeLib
MSI (s) ( 24:D4) [16:38:43:222]: 注意: 1: 2727 2:
MSI (s) (24:D4) [16:38:43:314]: 转换表错误。

MSI (s) (24:D4) [16:38:43:314]:转换表错误。

MSI (c) (98:4C) [16:38:43:326]:重新启动管理器:会话已打开。

那么,为什么引导场景中的 msi 挂起(并导致引导程序挂起),我该如何解决这个问题?

4

1 回答 1

0

由于链上的 DisableSystemRestore 值,您跳过了系统还原点的创建,但您没有在 msi 中执行类似的操作。您可以通过设置 MSIFASTINSTALL 属性跳过在您的 msi 中创建还原点。与 MSI 5.0 一起使用,如下所述:http: //msdn.microsoft.com/en-us/library/dd408005 (VS.85).aspx

<!-- Add me to your MSI definition -->
<Property Id="MSIFASTINSTALL" Value="1" />
于 2015-11-11T06:32:12.930 回答