Расширение Wix Util ProductSearch не работает неправильно

В настоящее время я использую Wix 3.10 на Windows 10.

Я пытаюсь выяснить, установлена ​​ли среда выполнения VC++ 2005 x64 (v8.0.61000) по коду продукта. Это определенно отображается в программах добавления-удаления. ProductCode определенно существует в разделе реестра для удаления и в Win32_Product. Get-Package в powershell также показывает это:

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. Но тогда мне нужно сделать сравнение версий, и настоящая проблема здесь в том, есть ли ошибка или нет?

Любые идеи?

Огромное спасибо!


person tcables    schedule 06.03.2020    source источник
comment
Чем больше я смотрел на обнаружение среды выполнения Visual C++, тем больше приходил к выводу, что то, что я пробовал, было слишком ненадежным. В конце концов я выбрал самостоятельный подход к проверке версии файла.   -  person Stein Åsmul    schedule 07.03.2020
comment
Вот еще кое-что: Проверьте, установлен ли код продукта. Помните, что коды продуктов могут меняться при обновлении среды выполнения. Вероятно, это верно как в теории, так и на практике, хотя я не проверял, так ли это для разных релизов.   -  person Stein Åsmul    schedule 07.03.2020
comment
Я должен добавить, что сценарии иногда блокируются антивирусом и, следовательно, не рекомендуются для использования в настройках для чего-либо, кроме тестирования и отладки - и, возможно, для получения и установки свойств - до тех пор, пока вы не вызываете какие-либо COM-объекты. (если это позволяет избежать настраиваемых действий управляемого кода с зависимостью от среды выполнения .NET — обязательное условие, которое необходимо включить, если вы просто получаете и устанавливаете свойства).   -  person Stein Åsmul    schedule 07.03.2020


Ответы (1)


util:ProductSearch работает в пакетах, а не в пакетах MSI, поэтому его нельзя использовать в условиях запуска.

person Bob Arnson    schedule 07.03.2020
comment
прямо от богов, спасибо! Кроме того, может быть, в качестве предложения функции выдать предупреждение или ошибку во время компиляции, если этот элемент нельзя использовать? - person tcables; 10.03.2020
comment
Да, это было запрошено, но это нетривиально, потому что пакеты также поддерживают фрагменты. Кроме того, мы хотели бы поддерживать поиск пакетов в качестве настраиваемых действий MSI. Однако часов в сутках не хватает... - person Bob Arnson; 10.03.2020