WiX ExePackage 总是在链内跳过

问题描述 投票:0回答:1

我有以下 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 应用程序中遗漏了某些内容?

非常感谢任何帮助!

c# wix3
1个回答
0
投票

捆绑日志非常清晰:

[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。

© www.soinside.com 2019 - 2024. All rights reserved.