Wix Bundle 在每个包之前重新评估条件
Wix Bundle re-evaluate conditions before each package
我正在使用托管引导程序。在我的包中,我有一个 msi 和一个 exe 包(一个大的基于 Winzip 的自解压安装程序),它们必须在 msi 包之前安装。 msi 包必须检查 exe 包是否安装正确,因为如果 exe 包安装失败或被用户取消,msi 不应继续安装。
仅在安装开始时评估检测条件,而不是在安装包期间或安装包之间进行评估。不幸的是,引导程序不会检测 exe 包是否失败或取消,因为每当用户取消安装时它都会返回 0。
问:在 exe 包安装之后和 msi 包开始安装之前,是否有任何 method/trick 重新评估安装条件,以便评估 msi 包 InstallCondition?
顺便说一句,我可以想到两个解决方案:
- 在msi内部评估检测条件(再次写入),但我想
从引导程序通知用户 UI。
- 在我的引导程序的 DetectPackageComplete() 方法中做一些事情,但我不这么认为,那将是一个正确的方法。
这是我的代码段:
<Bundle
Name = "$(var.ProductName)"
Copyright = "$(var.CopyrightNote)"
Version = "$(var.FileVersion)"
Manufacturer = "$(var.Manufacturer)"
IconSourceFile = "$(var.IconFile)"
UpgradeCode = "$(var.UpdgradeCode)"
AboutUrl = "$(var.AboutUrl)"
Compressed = "yes"
Tag = "VA"
>
<util:RegistrySearchRef Id="PreReqRuntimeReg"/>
<Chain>
<RollbackBoundary Id="StartPoint" />
<PackageGroupRef Id = "Product_PreReq" />
<MsiPackage Id = "MainProduct"
DisplayName = "$(var.ProductName)"
DisplayInternalUI = "no"
Cache = "yes"
Visible = "no"
Compressed = "yes"
EnableFeatureSelection = "yes"
SourceFile = "$(var.MainProduct)"
Vital = "yes"
InstallCondition = "PreReqRuntimeVersion="8.2""
>
</Chain>
</Bundle>
<Fragment Id="Product_PreReqs">
<util:RegistrySearch Id="PreReqRuntimeReg"
Variable="PreReqRuntimeVersion"
Root="HKLM"
Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ThirdParty Compiler Runtime 2013"
Value="DisplayVersion"
Result="value"
Win64="yes"
/>
<PackageGroup Id="Product_PreReq">
<ExePackage Id="PreReqRuntime2013"
DisplayName="ThirdParty Compiler Runtime 2013"
Description="ThirdParty Compiler Runtime 2013"
Cache="no"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile="D:\Pre-Reqs\Pre-Req2013_win64_installer.exe"
Protocol ="none"
DetectCondition="PreReqRuntimeVersion="8.2""
InstallCondition="(NOT (PreReqRuntimeVersion="8.2"))"
/>
</PackageGroup>
</Fragment>
到目前为止,我发现方法 1 是最佳选择(但是,仍在寻找更多),即 在 msi 中评估检测条件(再次写入)。因此,如果失败,请向用户显示有关失败的一般消息,并将日志文件的 link 提供给用户。
但是,仍在寻找更好的选择。此外,我强烈觉得有必要获取 msi 错误、解释它们并向用户显示正确的错误消息。
任何建议,帮助都非常受欢迎。 .. 谢谢
我正在使用托管引导程序。在我的包中,我有一个 msi 和一个 exe 包(一个大的基于 Winzip 的自解压安装程序),它们必须在 msi 包之前安装。 msi 包必须检查 exe 包是否安装正确,因为如果 exe 包安装失败或被用户取消,msi 不应继续安装。
仅在安装开始时评估检测条件,而不是在安装包期间或安装包之间进行评估。不幸的是,引导程序不会检测 exe 包是否失败或取消,因为每当用户取消安装时它都会返回 0。
问:在 exe 包安装之后和 msi 包开始安装之前,是否有任何 method/trick 重新评估安装条件,以便评估 msi 包 InstallCondition?
顺便说一句,我可以想到两个解决方案:
- 在msi内部评估检测条件(再次写入),但我想
从引导程序通知用户 UI。
- 在我的引导程序的 DetectPackageComplete() 方法中做一些事情,但我不这么认为,那将是一个正确的方法。
这是我的代码段:
<Bundle
Name = "$(var.ProductName)"
Copyright = "$(var.CopyrightNote)"
Version = "$(var.FileVersion)"
Manufacturer = "$(var.Manufacturer)"
IconSourceFile = "$(var.IconFile)"
UpgradeCode = "$(var.UpdgradeCode)"
AboutUrl = "$(var.AboutUrl)"
Compressed = "yes"
Tag = "VA"
>
<util:RegistrySearchRef Id="PreReqRuntimeReg"/>
<Chain>
<RollbackBoundary Id="StartPoint" />
<PackageGroupRef Id = "Product_PreReq" />
<MsiPackage Id = "MainProduct"
DisplayName = "$(var.ProductName)"
DisplayInternalUI = "no"
Cache = "yes"
Visible = "no"
Compressed = "yes"
EnableFeatureSelection = "yes"
SourceFile = "$(var.MainProduct)"
Vital = "yes"
InstallCondition = "PreReqRuntimeVersion="8.2""
>
</Chain>
</Bundle>
<Fragment Id="Product_PreReqs">
<util:RegistrySearch Id="PreReqRuntimeReg"
Variable="PreReqRuntimeVersion"
Root="HKLM"
Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ThirdParty Compiler Runtime 2013"
Value="DisplayVersion"
Result="value"
Win64="yes"
/>
<PackageGroup Id="Product_PreReq">
<ExePackage Id="PreReqRuntime2013"
DisplayName="ThirdParty Compiler Runtime 2013"
Description="ThirdParty Compiler Runtime 2013"
Cache="no"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile="D:\Pre-Reqs\Pre-Req2013_win64_installer.exe"
Protocol ="none"
DetectCondition="PreReqRuntimeVersion="8.2""
InstallCondition="(NOT (PreReqRuntimeVersion="8.2"))"
/>
</PackageGroup>
</Fragment>
到目前为止,我发现方法 1 是最佳选择(但是,仍在寻找更多),即 在 msi 中评估检测条件(再次写入)。因此,如果失败,请向用户显示有关失败的一般消息,并将日志文件的 link 提供给用户。
但是,仍在寻找更好的选择。此外,我强烈觉得有必要获取 msi 错误、解释它们并向用户显示正确的错误消息。 任何建议,帮助都非常受欢迎。 .. 谢谢