gpt4 book ai didi

visual-studio-2010 - WiX 'Bundle' 'ExePackage' 'DetectCondition' 总是假的

转载 作者:行者123 更新时间:2023-12-03 23:25:17 28 4
gpt4 key购买 nike

我正在尝试创建一个 WiX 包,在我的 MSI 之前安装 .NET Framework 4.0安装程序。我使用命令行参数 \l log.txt 检查了 bootstrap 的日志文件并发现 ExePackage::DetectCondition总是评估为假。

我包括WixNetFxExtension.dll作为我的 Visual Studio 2010 Windows Installer XML Bootstrapper 项目中的引用。

我包括 NetFxExtension命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

提供基本的bundle框架:
  <Bundle Name="RSA Bootstrapper"
...
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
...

<Chain>
<PackageGroupRef Id="NET40" />
<PackageGroupRef Id="RSA_Application" />
</Chain>
</Bundle>
...

我包括 <PropertyRef Id="NETFRAMEWORK40FULL" />在片段中,然后继续为 .NET Framework 4.0 ( NET40 ) 定义 ExePackage:
  <Fragment>
<PropertyRef Id="NETFRAMEWORK40FULL" />
<PackageGroup Id="NET40">
<ExePackage SourceFile="dotNetFx40_Full_x86_x64.exe"
Compressed="yes"
Cache="yes"
DetectCondition="NETFRAMEWORK40FULL"
InstallCommand="/norestart /passive /showrmui /ACTION=Install"
Permanent="yes"
InstallCondition="NOT NETFRAMEWORK40FULL"
Vital="yes" >
<ExitCode Value="0" Behavior="success" />
<ExitCode Value="1641" Behavior="scheduleReboot" />
<ExitCode Value="3010" Behavior="scheduleReboot" />
<ExitCode Behavior="error" /> <!-- Everything else is an error -->
</ExePackage>
...

我还检查了 Visual Studio 构建输出以确认 WixNetFxExtension.dll被正确引用:

C:\Program Files (x86)\WiX Toolset v3.7\bin\Light.exe ... -ext "C:\Program Files (x86)\WiX Toolset v3.7\bin\WixNetFxExtension.dll"

问题出在 DetectCondition属性(property)。不管我把它设置成什么,它的计算结果都是 false .

想着也许是 NETFRAMEWORK40FULL引用不可信,我尝试使用它:
<Fragment>
<Variable Name="isInstalled"
Type="numeric"
Value="0"
Persisted="yes"
bal:Overridable="yes"/>
<util:RegistrySearch Id="FindInstallKey"
Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
Value="Install"
Result="exists"
Variable="InstallKeyExists" />
<util:RegistrySearch
Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
Value="Install"
Variable="isInstalled"
After="FindInstallKey"
Condition="InstallKeyExists = true"
Format="raw" />
</Fragment>

设置 DetectCondition="isInstalled"DetectCondition="isInstalled = true"总是评估为假。偶设置 DetectCondition="true"总是评估为假!

这是我正在谈论的日志片段,带有 DetectCondition="true"
[16A0:17B4][2013-02-13T13:01:43]i001: Burn v3.7.1224.0, Windows v6.1 (Build 7601: Service Pack 1), path: C:\Users\lalic\Documents\Visual Studio 2010\Projects\RSA Preset\Bootstrapper\bin\Release\Bootstrapper.exe, cmdline: '/l log.txt -burn.unelevated BurnPipe.{33090847-CC78-445B-BAAA-564B840B7E8E} {38F95C6A-EC0F-4402-951B-FABFC5827CB6} 6296'
[16A0:17B4][2013-02-13T13:01:43]i000: Setting string variable 'WixBundleLog' to value 'C:\Users\lalic\Documents\Visual Studio 2010\Projects\RSA Preset\Bootstrapper\bin\Release\log.txt'
[16A0:17B4][2013-02-13T13:01:43]i000: Setting string variable 'WixBundleOriginalSource' to value 'C:\Users\lalic\Documents\Visual Studio 2010\Projects\RSA Preset\Bootstrapper\bin\Release\Bootstrapper.exe'
[16A0:17B4][2013-02-13T13:01:43]i052: Condition '((VersionNT = v5.1) AND (ServicePackLevel >= 3)) OR ((VersionNT = v5.2) AND (ServicePackLevel >= 2)) OR ((VersionNT = v6.0) AND (ServicePackLevel >= 1)) OR (VersionNT >= v6.1)' evaluates to true.
[16A0:17B4][2013-02-13T13:01:43]i000: Setting string variable 'WixBundleName' to value 'RSA Bootstrapper'
[16A0:17B4][2013-02-13T13:01:43]i100: Detect begin, 2 packages
[16A0:17B4][2013-02-13T13:01:43]i052: Condition 'true' evaluates to false.
[16A0:17B4][2013-02-13T13:01:43]i103: Detected related package: {D431417D-F0AC-4CFB-8E25-E27F5B8101D9}, scope: PerMachine, version: 2.1.15.0, language: 0 operation: MajorUpgrade
[16A0:17B4][2013-02-13T13:01:43]i101: Detected package: dotNetFx40_Full_x86_x64.exe, state: Absent, cached: None
[16A0:17B4][2013-02-13T13:01:43]i101: Detected package: RSA_Preset.msi, state: Absent, cached: None
[16A0:17B4][2013-02-13T13:01:43]i199: Detect complete, result: 0x0
[16A0:17B4][2013-02-13T13:02:04]i200: Plan begin, 2 packages, action: Install
[16A0:17B4][2013-02-13T13:02:04]i052: Condition 'NOT NETFRAMEWORK40FULL' evaluates to true.

具体来说, i052: Condition 'true' evaluates to false.实际上 Condition 'NOT NETFRAMEWORK40FULL' evaluates to true.即使我已经安装了 .NET 4.0 Full 并且可以在我的注册表中手动找到 .NET 4.0 条目,无论是在通常的位置还是在 HKLM\SOFTWARE\Wow6432Node 下。 (我在 64 位系统上)。

我错过了什么吗?为什么 DetectCondition 对我不起作用?该项目编译、运行、部署有效载荷等工作正常。

最佳答案

<PropertyRef Id="NETFRAMEWORK40FULL" />是对 MSI 属性的引用,但您正在创建一个包。 bundle 具有不同于 MSI 属性的变量,尽管 Burn 本身提供了许多模仿 MSI 提供的 bundle 变量。

也就是说,WixNetFxExtension 为 4.0 NetFx 安装程序提供了软件包组。您可以用一个简单的 <PackageGroupRef Id="NetFx40Redist" /> 替换所有这些。 .

关于visual-studio-2010 - WiX 'Bundle' 'ExePackage' 'DetectCondition' 总是假的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14863905/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com