我有一個長期居住的安裝程序,它使用RegistryValue來設置.Net COM服務器。安裝程序是32位。我希望將註冊表設置也設置爲64位操作系統。我的研究表明,我需要爲此目的有一個單獨的64位安裝程序。那麼我怎麼能有一個引導程序來檢測操作系統並調用正確的32位或64位.msi?基於WIX的安裝程序如何爲32位和64位Windows操作系統進行COM註冊?
回答
你需要自己編寫引導程序。
WiX不支持混合的32/64位軟件包,因爲Windows Installer不支持它們。但是,某些商業工具使用自定義引導程序和2個MSI文件來處理混合安裝程序。
我不想接受這個答案,但我研究了Wix 3.6中的Burn,但它似乎不允許嵌入式MSI的UI。對於我目前來說這是行不通的。很遺憾,我確實需要創建自己的Bootstrapper。看看燒傷,看看它是否適合你。 – KevM 2011-06-03 18:41:11
WiX確實支持32/64位軟件包:http://jpassing.com/2009/10/09/mixing-32-and-64-bit-components-in-a-single-msi/檢查@Thomas Schlaefer的回覆。 – 2013-01-02 22:44:22
我有一個自定義Windows Shell覆蓋擴展的問題,它必須爲32位Windows提供32位Dll,併爲64位Windows提供64位Dll。我的32位msi文件只會將註冊表項寫入64位系統上的WoW6432節點,因此外殼擴展不起作用。
- 創建兩個組件,一個將僅在一個32位的系統,而另一個只能在一個安裝安裝:
的溶液(用維克斯-3.5.2519.0上Win7的x86和x64測試) 64位系統。
- 在每個組件內使用'Condition'元素來檢查操作系統的位數。我使用Msix64,它可能也適用於VersionNT64 ...
- 64位組件必須將Win64屬性設置爲「是」。
- 不幸的是,這將不能成功開箱,因爲light.exe引發錯誤(錯誤LGHT0204:ICE80:該軟件包包含64位組件,但模板摘要屬性不包含Intel64或x64。):
- The解決方案是在禁用ICE80檢查的情況下運行light.exe(使用參數-sice:ICE80)。現在,msi文件將被生成並且可以在兩個平臺上使用。
實施例:
<Component Id="shellext_32.dll" DiskId="1" Guid="YOUR-GUID1">
<!-- this will be installed only on a 32-bit System-->
<Condition><![CDATA[NOT Msix64]]></Condition>
<!-- copy 32-bit Dll file...-->
<File Id="blah blah... />
<RegistryKey Id="MyShellIconOverlay" Root="HKLM"Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Value="{GUID...}" />
</RegistryKey>
</Component>
<Component Id="shellext_64.dll" DiskId="1" Guid="YOUR-GUID2" Win64="yes">
<!-- this will be installed only on a 64-bit System-->
<Condition><![CDATA[Msix64]]></Condition>
<!-- copy 64-bit Dll file...-->
<File Id="blah blah... />
<!-- the following Registry Key will NOT be created inside the WoW6432
<RegistryKey Id="MyShellIconOverlay64" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\MyIconOverlay64" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Value="{GUID...}" />
</RegistryKey>
</Component>
參考文獻:
謝謝!我得到了儘可能ICE80,但沒有意識到它會工作,如果被壓制:-) – Cameron 2014-04-23 13:23:47
- 1. 在32位和64位Windows中使用WIX進行COM註冊
- 2. WiX:阻止32位安裝程序在64位Windows上運行
- 3. 如何從32位應用程序註冊64位DLL(在64位操作系統上)
- 4. 從32位wix腳本註冊64位COM組件
- 5. 對32位系統中的64位字進行操作
- 6. 使用Wix安裝32位和64位驅動程序?
- 7. 32位和64位應用程序之間的COM互操作
- 8. 64位操作系統安裝所需的條件並不是失敗的32位Windows操作系統
- 9. 如果操作系統是Windows 2003(32位或64位)或Windows 2008(64位),請檢查WiX
- 10. 64位操作系統上的32位或64位應用程序?
- 11. 使用arm v8運行32位和64位操作系統
- 12. 註冊32位COM DLL到64位Windows 7
- 13. 如何檢測Flex中的32位或64位操作系統?
- 14. 常用安裝程序在64位和32位系統中設置註冊表值?
- 15. 64位操作系統上的32位VC++可再發行?
- 16. 在64位操作系統上安裝Windows應用程序windows 10
- 17. 如何從32位進程讀取64位註冊表項?
- 18. 如何在64位操作系統中註冊activeX組件(.dll)
- 19. 在64位操作系統上運行的32位程序內存消耗
- 20. 在64位和32位系統上運行程序
- 21. 在64位操作系統上的進程內wmi提供程序(32位)中加載本機DLL(32位)
- 22. 在32位操作系統上運行64位jvm
- 23. 在64位系統上註冊32位DLL
- 24. windows 7 64位安裝32位流星
- 25. 我可以在64位操作系統上安裝32位jvm嗎?
- 26. 32位操作系統VC++應用程序遷移到64位操作系統VC++應用程序
- 27. ADK安裝Windows 7家庭高級版64位操作系統
- 28. 在64位操作系統上以32位身份運行AnyCPU應用程序
- 29. 確定從32位操作系統或64位操作系統C/C++應用
- 30. 如何創建測試32位和64位Windows的安裝程序條件
我也看到提到技術,其中DLL的32個64位版本依賴關係被捆綁在內消耗組件。在程序集執行PInvoke之前,它會查看庫是否存在。如果不是,它會提取合適的捆綁DLL。 這似乎很瘋狂,但對我而言,完美無缺。對於將來的版本,我可以嘗試這個路線。 – KevM 2012-01-27 15:18:02