【问题标题】:Wix Util Extension ProductSearch Not Functioning Not working correctlyWix Util Extension ProductSearch 无法正常工作
【发布时间】:2020-06-19 13:27:34
【问题描述】:

我目前在 Windows 10 上使用 Wix 3.10。

我正在尝试查找产品代码是否安装了 VC++ 2005 运行时 x64 (v8.0.61000)。它肯定会显示在添加删除程序中。 ProductCode 肯定存在于卸载注册表部分和 Win32_Product 中。 Powershell 中的 Get-Package 也显示了它:

Get-Package | Where Name -Like "*2005*" | select -First 1 | fl

PropertyOfSoftwareIdentity : PropertyOfSoftwareIdentity
FastPackageReference       : {ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}
ProviderName               : msi
Source                     :
Status                     : Installed
SearchKey                  :
FullPath                   :
PackageFilename            : ?
FromTrustedSource          : False
Summary                    :
SwidTags                   : {Microsoft Visual C++ 2005 Redistributable (x64)}
CanonicalId                : msi:Microsoft Visual C++ 2005 Redistributable (x64)/8.0.61000
Metadata                   : {ProductCode}
SwidTagText                : <?xml version="1.0" encoding="utf-16" standalone="yes"?>
                             <SoftwareIdentity
                               name="Microsoft Visual C++ 2005 Redistributable (x64)"
                               version="8.0.61000"
                               versionScheme="multipartnumeric"
                               tagId="ad8a2fa1-06e7-4b0d-927d-6e54b3d31028"
                             xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd">
                               <Meta
                                 ProductCode="{ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}" />
                             </SoftwareIdentity>
Dependencies               : {}
IsCorpus                   :
Name                       : Microsoft Visual C++ 2005 Redistributable (x64)
Version                    : 8.0.61000
VersionScheme              : multipartnumeric
TagVersion                 :
TagId                      : ad8a2fa1-06e7-4b0d-927d-6e54b3d31028
IsPatch                    :
IsSupplemental             :
AppliesToMedia             :
Meta                       : {{ProductCode}}
Links                      : {}
Entities                   : {}
Payload                    :
Evidence                   :
Culture                    :
Attributes                 : {name,version,versionScheme,tagId}

但是当我创建一个启动条件并使用 util:ProductSearch 它返回空白,导致条件触发并退出。

  <Fragment>
    <Property Id="LC_MSVCPP_8_0_X64_LATEST_REQUIRED" Value="LaunchCondition" />

    <util:ProductSearch Id="MSVC2005.v8.0.61000.x64" Variable="MSVCPP_8_0_61000_X64_DETECTED" ProductCode="{AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}" Result="version" />

    <Condition Message="VC++ 2005 x64 runtime not found!">MSVCPP_8_0_61000_X64_DETECTED</Condition>
  </Fragment>

我也尝试过重启。

我应该注意,这绝对可以通过 upgradeCode 进行搜索。但是接下来我必须做版本比较,这里真正的问题是有没有bug?

有什么想法吗?

非常感谢!

【问题讨论】:

  • 我对 Visual C++ 运行时检测的研究越多,就越觉得我尝试的方法太不可靠了。最后我选择了a home-grown file version check approach
  • 这里有别的东西:Check for product code installed。请记住,产品代码可能会因运行时的升级而更改。这在理论上和实践中可能都是正确的,尽管我没有检查过不同版本是否是这种情况。
  • 我应该补充一点,脚本有时会被防病毒软件阻止,因此不建议在设置中使用,除了测试和调试——也许还有属性的获取和设置——只要您不调用任何 COM 对象(如果这样可以避免依赖于 .NET 运行时的托管代码自定义操作 - 如果您只是获取和设置属性,则需要包含一个重要的先决条件)。

标签: wix redistributable launch-condition


【解决方案1】:

util:ProductSearch 在捆绑包中工作,而不是 MSI 包,因此它不能在启动条件下使用。

【讨论】:

  • 直截了当,谢谢!另外,也许作为功能建议,如果无法使用此元素,则在编译期间抛出警告或错误?
  • 是的,它已被请求,但它并不重要,因为捆绑包也支持片段。此外,我们很乐意支持捆绑搜索作为 MSI 自定义操作。然而,一天的时间不够……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2016-09-01
  • 2012-07-11
相关资源
最近更新 更多