2017-10-09 119 views
0
<Property Id="VC2015_X86"> 
    <RegistrySearch Id="VC2015_X86" 
        Root="HKLM" 
        Key="SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeAdditional" 
        Name="Version" 
        Type="raw" 
        /> 
    </Property> 

該屬性由此搜索設置。但是它在32位上失敗,因爲Wow6432Node搜索。檢查VC2015運行時是否安裝了Wix Installer但是找到32bit或64bit

但是Wix Doc中的RegistrySearch元素表示 Win64 YesNoType當值爲'yes'時,指示搜索查找64位註冊表。當值爲'否'時,搜索將在32位註冊表中查找。缺省值基於由-arch開關設置的平臺基於candle.exe或.wixproj MSBuild項目中的InstallerPlatform屬性:對於x86和ARM,默認值爲'no'。對於x64和IA64,默認值爲'yes'。

如果我改變這個如下,這將工作在32位和64位?

<Property Id="VC2015_X86"> 
    <RegistrySearch Id="VC2015_X86" 
        Root="HKLM" 
        Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeAdditional" 
        Name="Version" 
        Type="raw" 
        /> 
    </Property> 

回答

3

您的更改已經完成了一半。儘管暗示Redistributing Visual C++ Files的指導,我建議您避免直接引用Wow6432Node鍵。相反,您應該使用可用的指定32位註冊表視圖。 (爲了更好地瞭解32位註冊表視圖的想法,請在64位機器上比較常規C:\ Windows \ System32 \ regedit.exe和C:\ Windows \ SysWow64 \ regedit.exe)。

在你的情況下,要查找存在的32位redist,這意味着指定具有它的32位視圖名稱的密鑰(Key="SOFTWARE\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeAdditional"),並明確指定Win64="No",以便搜索將使用32位視圖配置您的項目的32位或64位版本。

如果您還希望在64位機器上找到64位redist,則應該在另一個屬性中添加第二個搜索,並根據您對32位版本的需求,明確指定Win64="Yes"或確保該搜索僅包含在項目的64位版本中。很有可能你不需要搜索兩者,因爲任何給定的.exe或.dll將僅取決於32位或64位redists的一位數。