2013-09-05 114 views
11

我的應用程序使用「Any CPU」配置構建。該應用程序的WIX安裝程序使用platform=x86構建,因此生成的MSI爲32位。使用32位MSI在64位Windows上安裝「AnyCPU」程序有什麼危害?

當我在64位Windows上運行32位MSI時。 [ProgramFilesFolder]屬性已解析爲「C:\ Program Files(x86)」,註冊表路徑解析爲Wow6432Node。當我運行該應用程序時,該過程是64位 - 如預期的那樣。

據我瞭解,在閱讀了很多關於SO的相關帖子後。在64位Windows上,將[ProgramFilesFolder]解析爲「C:\ Program Files」,並將註冊表路徑解析爲正常路徑(不在Wow6432Node下)。我需要一個單獨的64位MSI。我試圖避免 - 對我來說,單獨使用一個單獨的64位MSI僅適用於[ProgramFilesFolder],並且註冊路徑以解決正確位置不值得。只要我的程序仍然在64位Windows上運行64位,我並不關心它在默認情況下安裝在「C:\ Program Files(x86)」中,並且某些註冊表值存在於Wow6432Node

所以,我的問題是,當我在64位Windows上使用默認的32位MSI安裝「AnyCPU」程序時,會出現其他的後果,installDir是「C:\ Program Files(x86 )「和一些註冊表值存儲在Wow6432Node

+1

你是否正在注意存儲在Wow6432Node中的任何註冊表設置正在被您的程序讀取而不是原生位置(如果您正在讀取它們)? –

+0

爲什麼不建立這兩個,並有32位版本檢測64位操作系統,然後執行Setup64.exe並退出如果是true? –

+0

@Scott Chamberlin,我只在註冊表中安裝了一個值。在64位運行時強制從Wow6432Node讀取C#代碼比創建另一個安裝程序更容易。 – sean717

回答

2

如果程序試圖讀取存儲在32位註冊表視圖中的值,唯一真正的危害是可能出現的。當以64位進程運行時,它將無法找到它們。如果發生這種情況,那麼您可以簡單地使用RegistryView枚舉強制讀取32位視圖。但我想你提到的註冊表設置與安裝程序有關。

實際上,您描述的場景是我如何部署我的應用程序。由於我將32位和64位版本部署到同一臺計算機,並且由於它們共享一些文件,我將所有內容都安裝到32位程序文件中。然後所有的註冊表訪問權限都是32位視圖。如果您希望32位和64位版本在註冊表的重定向部分中共享相同的值,則實際上沒有其他選擇。

相關問題