2012-05-24 45 views
2

我創建了一個WiX安裝程序,爲Windows 2010部署了一個附加組件。目標系統當前爲x64 Win & Office已安裝。我瀏覽了幾個微軟網站,告訴我我需要的不僅僅是x64安裝程序運行時(因爲在當前字的運行過程中增加了負載)。 此安裝程序將檢查VSTO運行時使用這種說法的存在:已安裝VSTO x64運行時,但無法找到

<?if $(var.Platform)=x64 ?> 
<?define win64Flag = "yes"?> 
<?else ?> 
<?define win64Flag = "no"?> 
<?endif ?> 

<Property Id="VSTORUNTIMEREDIST"> 
    <RegistrySearch Id="VSTORuntimeRedist" Root="HKLM" Key="SOFTWARE\Microsoft\vsto runtime setup\v4R\VSTORFeature_CLR40" Name="Version" Type="raw" Win64="$(var.win64Flag)"/> 
</Property> 

<Property Id="OFFICERUNTIME"> 
    <RegistrySearch Id="OfficeRuntime" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4" Name="Version" Type="raw" Win64="$(var.win64Flag)"/> 
</Property> 
<Condition Message="The Visual Studio 2010 Tools for Office Runtime is not installed. Please install the Office Runtime."> 
    <![CDATA[Installed OR VSTORUNTIMEREDIST>="10.0.30319" OR OFFICERUNTIME>="10.0.21022"]]> 
</Condition> 

其實它的工作爲我安裝x86版本,而是建立在64位模式下,無法找到任何在註冊表中的64項時間(即使運行時已安裝)。 我已經嘗試卸載並重新安裝運行時(用重新啓動),但它不起作用。

我也刪除了檢查,以獲得我的添加在安裝,但它不加載然後acutally。

因此,我的問題是,如果有任何已知的錯誤問題或我使用了錯誤的註冊表項?

回答

5

在x64系統上,WoW64應用程序被透明地重定向到註冊表的Wow6432Node節點,所以它們實際上在找到它所在的關鍵字HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup。但真正的x64應用程序會查看真實的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTO Runtime Setup節點,而關鍵當然不在那裏。這很可能會導致安裝程序失敗。因此,對於x64安裝程序,您需要指定具有Wow6432Node路徑部分的完整節點。

這被稱爲註冊表反射和covered in details here

+0

這是否僅適用於HKLM或每個基本密鑰?我有紅色,可能應該放置適當的AddIn註冊表項(FriendlyName,LoadBehaviour,Manifest文件位置)到HKCU只有一個用戶。我將不得不把這些密鑰然後解釋到WoW6432Node? – inva

+0

@inva僅限於註冊表的某些部分,請參閱已更新的答案。 –

+0

非常感謝,這個鏈接在另一方面幫了我很多。 – inva

相關問題