我有以下 WiX 捆绑链:
<Chain>
<ExePackage Id="epVisualCPP2013Redist"
SourceFile="$(var.Visual2013CPPRedistDir)vcredist_x64.exe"
Permanent="yes"
Vital="yes"
Cache="no"
Compressed="yes"
PerMachine="yes"
DetectCondition="0"
InstallCondition="1"/>
<MsiPackage Id="mpTestMsiPackage"
SourceFile="$(var.TestMsiPackage.TargetPath)"
Vital="yes"
Visible="yes"
LogPathVariable="LogLocation"
Permanent="no"
Compressed="yes"/>
</Chain>
在这种情况下,我尝试强制安装
Visual C++ 2013 Redistributable Package
(vcredist_x64.exe)。问题是,它永远不会被安装,与 DetectCondition
或 InstallCondition
的设置无关(包括我省略它们的情况)。带有 Id="mpTestMsiPackage"
的软件包已正确安装。
注意:我已经可以检测是否是redist。软件包是否已安装。此时适当设置条件是次要的。目前,我希望能够强制执行 redist。始终安装软件包。
检查日志,我发现以下条目:
[D0D8:CE50][2023-08-19T01:05:38]i101: Detected package: epVisualCPP2013Redist, state: Absent, cached: None
...
[D0D8:CE50][2023-08-19T01:05:41]w321: Skipping dependency registration on package with no dependency providers: epVisualCPP2013Redist
...
[D0D8:CE50][2023-08-19T01:05:41]i201: Planned package: epVisualCPP2013Redist, state: Absent, default requested: Present, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
如果我在 Bootstrapper 应用程序中执行以下操作,它将根据需要进行安装:
private void bootstrapperApplication_PlanPackageBegin(object sender, PlanPackageBeginEventArgs e)
{
if (e.PackageId == "epVisualCPP2013Redist")
e.State = RequestState.Present;
}
我错过了什么? ExePackage 是否配置不正确或者我在 Bootstrapper 应用程序中遗漏了某些内容?
非常感谢任何帮助!
捆绑日志非常清晰:
[D0D8:CE50][2023-08-19T01:05:41]i201: Planned package: epVisualCPP2013Redist, state: Absent, default requested: Present, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
这部分意味着
ba requested: None
您的 BoostrapperApplication 代码正在强制包Absent
。您没有提供足够的代码来理解为什么会发生这种情况,但是去调试您的 BA。