detect presence of vcredist - using the UpgradeCode

前端 未结 2 686
予麋鹿
予麋鹿 2021-01-02 19:25

in a wix burn bootstrapper bundle: how to detect whether ms vcredist 2013 x86 is present or not?
i\'m doing a check for the Upgrade Id /

相关标签:
2条回答
  • 2021-01-02 19:45

    I use registry serach to check if installed, try to do it as:

    <util:RegistrySearch
      Root="HKLM"
      Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<Place Guid>"
      Value="DisplayVersion"
      Variable="MSVC_2013_x64"
      Win64="yes"/>
    

    and the condition as:

    DetectCondition="MSVC_2013_x64 AND (MSVC_2013_x64 &gt;= v12.0.21005)"
    
    0 讨论(0)
  • 2021-01-02 19:51

    the following logic works fine for the bootstrapper bundle (burn):

    <Fragment>
        <!-- vcredist 2013 x86 -->
        <util:ProductSearch Id="VCREDIST_120_x86"
            UpgradeCode="B59F5BF1-67C8-3802-8E59-2CE551A39FC5"
            Result="version"
            Variable="VCREDIST_120_x86" />
    
        <PackageGroup Id="redist_vc120">
            <ExePackage Id="vc120" Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
                SourceFile="redist\VC120_Runtime\vcredist_x86.exe"
                InstallCommand="/quiet /norestart"
                DetectCondition="(VCREDIST_120_x86 &gt;= v12.0.21005)" />
        </PackageGroup>
    </Fragment>
    

    to summarize:

    • for search it uses util:ProductSearch with UpgradeCode parameter.
    • for detection it does a version comparison in the DetectCondition.

    in burn the product detection based on the UpgradeCode obviously works different than in msi (where we can use the upgrade table along with attribute "OnlyDetect" and then configure a "LaunchCondition").


    just for reference:
    i found the following UpgradeCodes (along with their minimum version) to match ...

    x86:

    vcredist 2005 x86 - 86C9D5AA-F00C-4921-B3F2-C60AF92E2844, 8.0.61001
    vcredist 2008 x86 - DE2C306F-A067-38EF-B86C-03DE4B0312F9, 9.0.30729.6161
    vcredist 2010 x86 - 1F4F1D2A-D9DA-32CF-9909-48485DA06DD5, 10.0.40219
    vcredist 2012 x86 - 4121ED58-4BD9-3E7B-A8B5-9F8BAAE045B7, 11.0.61030
    vcredist 2013 x86 - B59F5BF1-67C8-3802-8E59-2CE551A39FC5, 12.0.40660
    vcredist 2015 x86 - 65E5BD06-6392-3027-8C26-853107D3CF1A, 14.0.23506
    vcredist 2017 x86 - 65E5BD06-6392-3027-8C26-853107D3CF1A, 14.15.26706
    vcredist 2019 x86 - 65E5BD06-6392-3027-8C26-853107D3CF1A, 14.20.27508
    

    x64:

    vcredist 2005 x64 - A8D19029-8E5C-4E22-8011-48070F9E796E, 8.0.61000
    vcredist 2008 x64 - FDA45DDF-8E17-336F-A3ED-356B7B7C688A, 9.0.30729.6161
    vcredist 2010 x64 - 5B75F761-BAC8-33BC-A381-464DDDD813A3, 10.0.40219
    vcredist 2012 x64 - EFA6AFA1-738E-3E00-8101-FD03B86B29D1, 11.0.61030
    vcredist 2013 x64 - 20400CF0-DE7C-327E-9AE4-F0F38D9085F8, 12.0.40660
    vcredist 2015 x64 - 36F68A90-239C-34DF-B58C-64B30153CE35, 14.0.23506
    vcredist 2017 x64 - 36F68A90-239C-34DF-B58C-64B30153CE35, 14.15.26706
    vcredist 2019 x64 - 36F68A90-239C-34DF-B58C-64B30153CE35, 14.20.27508
    

    EDIT HISTORY:

    1) updated the UpradeCode for vcredist 2017 x86 as per Brian Sutherland's comment. VS 2015, VS 2017 and VS 2019 all remain within the same family of 14.*.

    2) added x64 variants to answer the question in Ahmed Daniel's comment. the updated listing mainly has been determined from running a modified version of the solution as suggested in answer https://stackoverflow.com/a/46637095
    it's a shame that there's no official documentation by microsoft regarding those specific upgradecodes, but we just have to go and figure out ourselves ...

    0 讨论(0)
提交回复
热议问题