我正在使用托管引导程序。在我的捆绑包中,我有一个msi和一个exe包(一个基于Winzip的大型自动提取器安装程序),必须在msi包之前安装。 msi包必须检查exe包是否安装正确,因为如果安装exe包失败或被用户取消,msi不应继续安装。
检测条件仅在安装开始时评估,而不是在软件包安装期间或之间评估。不幸的是,bootstrapper无法检测exe包是否失败或取消,因为每当用户取消安装时它都会返回0。
问:在安装exe软件包之后,在msi软件包开始安装之前,是否有任何方法/技巧可以重新评估安装条件,以便评估msi软件包的InstallCondition?
顺便说一句,我可以想到两个解决方案:
以下是我的代码段:
<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>
答案 0 :(得分:0)
到目前为止,我发现方法1是最好的选择(但仍然需要更多),即评估msi内的检测条件(再次写入)。因此,如果失败,向用户显示有关失败的通用消息,并将日志文件的链接提供给用户。
然而,仍在寻找更好的选择。此外,我强烈感到需要获取msi错误,解释它们并向用户显示正确的错误消息。 任何建议,帮助都非常欢迎。 ..谢谢