我目前有兩個WIX安裝程序用於我維護的產品。一個用於32位操作系統,另一個用於64位操作系統。我不想維護兩個單獨的安裝程序,而是將它們組合成一個NSIS安裝程序,它可以「確定」操作系統的「位」,然後將適當的二進制文件複製到程序目錄中。有沒有人有過這方面的經驗,可以提供一個NSIS可以用來製作安裝程序的工作示例腳本?使用一個NSIS安裝程序可以在32位操作系統上安裝32位二進制文件,並在64位操作系統上安裝64位二進制文件?
回答
x64.nsh有一定的輔助宏,你可以安裝到$programfiles32
或$programfiles64
編輯:
Function .onInit
StrCpy $instdir $programfiles32\MyApp
${If} ${RunningX64}
StrCpy $instdir $programfiles64\MyApp
${EndIf}
FunctionEnd
...
Section
Setoutpath $instdir
${If} ${RunningX64}
File /r build\64\*
${Else}
File /r build\32\*
${EndIf}
SectionEnd
我相信,我想通了......我沒有測試過這個呢,但它應該工作...
答案是爲每組文件創建兩個「部分」。用於32位的SEC0000
和用於64位文件的SEC0001
。然後,
!include x64.nsh
Function .onInit
#Determine the bitness of the OS and enable the correct section
${if} ${RunningX64}
SectionSetFlags ${SEC0001} 17
SectionSetFlags ${SEC0000} 16
${else}
SectionSetFlags ${SEC0001} 16
SectionSetFlags ${SEC0000} 17
${endif}
FunctionEnd
我相信,同樣的邏輯,將需要在un.onInit
功能也因此卸載程序知道哪些文件刪除...
使用sections.nsh中的幫助程序宏選擇/取消選擇部分... – Anders
對於使用3.0a0簡單通用的安裝程序,我發現那下面爲我工作一個小實驗:
!include x64.nsh
Function .onInit
#Determine the bitness of the OS and enable the correct section
${If} ${RunningX64}
SectionSetFlags ${SEC0000} ${SECTION_OFF}
SectionSetFlags ${SEC0001} ${SF_SELECTED}
${Else}
SectionSetFlags ${SEC0001} ${SECTION_OFF}
SectionSetFlags ${SEC0000} ${SF_SELECTED}
${EndIf}
FunctionEnd
我必須記住把函數引用的部分後。我的每個部分都簡單地在其各自的32位/和64位/目錄中引用同名的.exe,因此我的卸載程序不需要任何特殊處理。我沒有在32位系統上測試過它,但它確實適用於64位系統。
例子:
section "64-bit" SEC0001
messageBox MB_OK "64-BIT!"
File "C:\foo\64-bit\some-utility.exe"
sectionEND
因此,您需要' !在你的腳本中包含「Sections.nsh」'作爲'SF_SELECTED'選擇是'Sections.nsh'的一部分 – icc97
- 1. 安裝在64位操作系統上的Windows 32位Eclipse?
- 2. 在32位操作系統上運行二進制文件以在64位操作系統上運行
- 3. 我可以在64位操作系統上安裝32位jvm嗎?
- 4. 32位/ 64位系統上的二進制文件?
- 5. 在64位系統上檢測32位程序的安裝
- 6. Rpm spec選項,不允許在64位操作系統上安裝32位rpm
- 7. 在64位操作系統上啓動32位進程
- 8. 在64位系統上編譯32位二進制
- 9. 64位操作系統安裝所需的條件並不是失敗的32位Windows操作系統
- 10. 什麼告訴32位GCC在64位系統上,使64位二進制
- 11. java jni在64位系統上使用32位二進制文件
- 12. 32位/ 64位操作系統?
- 13. 從32位WIX安裝程序中檢測64位系統
- 14. Windows 64位操作系統上的32位或64位Android SDK?
- 15. 在64位上安裝python 32位Kubuntu
- 16. 在64位Fedora上安裝32位Python
- 17. JVM 32位安裝在Win7 64位操作系統中,但它不被識別
- 18. 在32位系統上安裝64位glib2進行交叉編譯
- 19. 無法在Windows 8 64位操作系統上安裝jdk
- 20. 上運行64位操作系統給ERROR 64位操作系統Android的工作室:32位Linux的Android模擬器的二進制文件已被棄用
- 21. 64位操作系統上的32位或64位應用程序?
- 22. VM Virtual Box 64位硬件上的32位操作系統
- 23. 64位操作系統上的32位VC++可再發行?
- 24. 在32位操作系統上生成64位可執行文件
- 25. JNA在64位操作系統上具有32位JVM
- 26. 在64位操作系統上調試32位CASSINI(Oracle 9)
- 27. 在64位架構上的32位操作系統
- 28. 在64位服務器上加載32位dll操作系統
- 29. 在32位操作系統上運行64位jvm
- 30. gcc:在32位平臺上編譯64位二進制文件
我沒有看這個,這將讓我確定操作系統的位數,但我仍然會碰到,我需要告訴要安裝哪些文件安裝程序的問題。我目前有一個「部分」,其中包含: 'SetOutPath $ {PROGRAMINSTALL} File/r build \\ *' 所以我不確定x64模塊會在這種情況下有所幫助... –
另外, m沒有在64位系統上安裝32位二進制文件...我在64位操作系統上安裝64位文件,在32位操作系統上安裝32位文件... –
@JulianEasterling這樣說系統要安裝的文件。如果你將64位文件放在'build \ 64'中,並且在'build \ 32'中放入32位文件。如果您還需要根據體系結構更改安裝目錄,則可以在If/Else中放置'SetOutPath' – icc97