如何覆盖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的文档页面
有可用于控制创建还原点
DisableSystemRestore YesNoType指定是否在一个特定的属性(DisableSystemRestore) bundle会在执行链时尝试创建一个系统还原点。如果指定了“是”,则不会创建系统还原点。默认值为“no”,表示在安装,卸载,修复,修改等时将创建系统还原点。如果无法创建系统还原点,则捆绑软件将记录问题并继续。
注意:如果在操作系统级别
嗨克里斯塔洛,感谢您的回答。不幸的是,这是行不通的。该文档说默认值为“否”,所以通过将其保留(因为我有),应该创建还原点。另外,您可以从我的问题的日志文件中看到系统还原点实际上已创建,但出于某种原因,系统还原窗口中的还原点列表中未显示该点。没有其他日志项目可以说明恢复点不显示的原因。另外,我相信如果系统恢复被操作系统禁用,你会在日志文件中得到不同的错误信息。 –