我正在使用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"));
}
}
我在这里真的很难过 - 有谁知道我怎么能这样做?
答案 0 :(得分:0)
看看这个wix文档页面
可以使用特定属性(DisableSystemRestore)来控制还原点创建
DisableSystemRestore YesNoType指定捆绑包在执行链时是否尝试创建系统还原点。如果&#34;是&#34;如果指定,则不会创建系统还原点。默认值为&#34; no&#34;表示在安装,卸载,修复,修改捆绑包时将创建系统还原点。如果无法创建系统还原点,则捆绑包将记录问题并继续。
注意:如果在操作系统级别禁用了还原点,则无法强制创建还原点