2014-09-06 57 views
0

我有一個InstallShield Basic MSI項目,它使用Release Flags機制來構建32位和64位安裝程序,以使用正確的模板摘要等構建不同的包。我的一個組件是explorer.exe外殼擴展,因此爲了使它工作,它需要在註冊表中的64位節點上註冊,而不是在Wow6432Node中安裝在Windows 64位上。但是,由於這是一個32位的Windows組件安裝程序,因此它將被註冊爲Wow6432Node。 InstallShield告訴我這是本機Windows Installer行爲,除了自定義操作(我已經使用過)之外,沒有辦法解決這個問題。是否有可能讓Windows Installer註冊包裝在32位組件中的64位外殼擴展?

我必須訴諸運行regasm?這是我目前所做的,但我寧願不使用自定義操作來完成這樣的事情。此外,看起來其他產品具有相同的模式:64位外殼擴展,但是安裝了程序文件(x86)。例如,我看到TFS Power Tools和WinZip這樣做。對於這些產品,我沒有看到regasm.exe運行,所以我認爲他們有一些其他機制。

任何想法?

+0

也許我在這裏丟失了一些東西,但是不能用包含32位擴展名的32位安裝和包含32位和64位擴展的64位安裝其中轉到WOW和本地註冊表?這意味着除非IS構建允許您根據體系結構忽略公共構建中的某些組件,否則您不能擁有共同的源代碼。 – PhilDW 2014-09-06 18:28:16

+0

問題是64位安裝程序的目標是OFFICE 64位 - 這是將其與32位安裝區分開來的原因。無論如何,正在安裝的應用程序並非100%純64位,並且它不能安裝第三方32位DLL。 – JohnZaj 2014-09-07 21:17:42

+0

64位安裝可以安裝32位和64位組件。您的64位安裝程序可以具有32位Dll的32位組件以及具有64位Dll版本的不同64位組件,並將它們安裝到各自不同的註冊表和磁盤位置。 32位系統獲得32位安裝,64位客戶機獲得64位biy安裝。唯一禁止的是32位設置不能包含64位組件,所以如果這是您的問題,那麼是的,這是MSI的工作方式。否則,我顯然仍然缺少一些東西,對不起。 – PhilDW 2014-09-07 21:31:58

回答

0

你嘗試設置msidbComponentAttributesDisableRegistryReflectionComponent table)屬性,用於該組件?

+0

是的。這個屬性不能幫助我,因爲我的組件是32位的。基本上,如果組件屬性<256(我的這個是'0'),那麼它會安裝到wow6432node – JohnZaj 2014-09-07 13:52:04

相關問題