如何覆盖Wix中的默认MSIFASTINSTALL值?

时间:2017-08-11 07:53:00

标签: c# wix windows-installer

我正在使用WixStandardBootstrapperApplication(WiX 3.11)来构建捆绑的安装程序。它运行良好,但我需要它在安装之前创建一个系统还原点。

我认为这是默认行为,但Wix在Chain中提供了一个属性,以便在需要时禁用它。

我的链如下:

<Chain>
  <MsiPackage SourceFile="Application1.msi" />
  <MsiPackage SourceFile="Application2.msi" />
</Chain>

当我运行可执行文件并查看日志文件时,我可以看到已创建系统还原点:

[1E04:2828][2017-08-11T17:29:50]i360: Creating a system restore point.
[1E04:2828][2017-08-11T17:29:50]i361: Created a system restore point.

但是,当我在Windows上打开系统还原UI时,我看不到还原点。

当我进一步查看日志文件时,我看到引导程序在调用.msi安装程序时使用的参数:

[1E04:2828][2017-08-11T17:29:53]i301: Applying execute package: Application1.msi, action: Install, path: C:\ProgramData\Package Cache\{28AD869E-998E-44D1-B83F-062D614B5EDC}v1.4.7\CApplication1.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7"'

根据MSIFASTINSTALL documentation,值为7表示不会创建系统还原点。

所以我尝试通过如下设置链来覆盖它:

<Chain>
  <MsiPackage SourceFile="Application1.msi" >
    <MsiProperty Name="MSIFASTINSTALL" Value="0"/>
  </MsiPackage>
  <MsiPackage SourceFile="Application1.msi">
    <MsiProperty Name="MSIFASTINSTALL" Value="0"/>
  </MsiPackage>
</Chain>

似乎已添加该属性,但未替换:

[3354:3128][2017-08-11T16:22:43]i301: Applying execute package: CDV, action: Install, path: C:\ProgramData\Package Cache\{28AD869E-998E-44D1-B83F-062D614B5EDC}v1.4.7\ClinicalDataViewerSetup.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" MSIFASTINSTALL="0"'

仍然没有系统还原点。

深入研究WiX source code,看起来只有在MSIFASTINSTALL属性不存在时才应设置它:

// Unless the MSI or setup code overrides the default, set MSIFASTINSTALL for best performance.
if (!ChainPackageInfo.HasProperty(db, "MSIFASTINSTALL"))
{
    bool fastInstallSet = false;
    foreach (MsiPropertyInfo propertyInfo in this.MsiProperties)
    {
        if ("MSIFASTINSTALL".Equals(propertyInfo.Name, StringComparison.Ordinal))
        {
            fastInstallSet = true;
            break;
        }
    }

    if (!fastInstallSet)
    {
        this.MsiProperties.Add(new MsiPropertyInfo(this.Id, "MSIFASTINSTALL", "7"));
    }
}

我在这里真的很难过 - 有谁知道我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

看看这个wix文档页面

wix Chain Element doc

可以使用特定属性(DisableSystemRestore)来控制还原点创建

  

DisableSystemRestore YesNoType指定捆绑包在执行链时是否尝试创建系统还原点。如果&#34;是&#34;如果指定,则不会创建系统还原点。默认值为&#34; no&#34;表示在安装,卸载,修复,修改捆绑包时将创建系统还原点。如果无法创建系统还原点,则捆绑包将记录问题并继续。

注意:如果在操作系统级别禁用了还原点,则无法强制创建还原点