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

问题描述:

我正在使用WixStandardBootstrapperApplication(WiX 3.11)构建捆绑安装程序。它工作的很好,但我需要它在安装之前创建一个系统还原点。如何覆盖Wix中的默认MSIFASTINSTALL值?

我相信这是默认行为,但Wix在链中提供了一个属性,在需要时禁用此属性。

我的链条如下:

<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")); 
    } 
} 

我认真这里难倒 - 没有人知道我怎么能得到这个加工?

看看这个WiX的文档页面

wix Chain Element doc

有可用于控制创建还原点

DisableSystemRestore YesNoType指定是否在一个特定的属性(DisableSystemRestore) bundle会在执行链时尝试创建一个系统还原点。如果指定了“是”,则不会创建系统还原点。默认值为“no”,表示在安装,卸载,修复,修改等时将创建系统还原点。如果无法创建系统还原点,则捆绑软件将记录问题并继续。

注意:如果在操作系统级别

+0

嗨克里斯塔洛,感谢您的回答。不幸的是,这是行不通的。该文档说默认值为“否”,所以通过将其保留(因为我有),应该创建还原点。另外,您可以从我的问题的日志文件中看到系统还原点实际上已创建,但出于某种原因,系统还原窗口中的还原点列表中未显示该点。没有其他日志项目可以说明恢复点不显示的原因。另外,我相信如果系统恢复被操作系统禁用,你会在日志文件中得到不同的错误信息。 –

禁用创建还原点是不能勉强我已经想通了,为什么没有创建还原点。事实证明,这个问题与Windows中的WiX或系统还原设置无关。

我检查了Windows事件查看器,发现还没有创建还原点,因为“有一个可用的还原点,这对于系统还原来说已经足够了”。

enter image description here