簡體   English   中英

您如何使用NSIS制作更新安裝程序?

[英]How do you make an update installer with NSIS?

我目前有一個使用NSIS制作的安裝程序的項目,但是我想更新到僅包含已更改文件並顯示變更日志的新版本。 目標平台是Windows。 您必須采取什么方法/建議?

您可能需要重新考慮使用NSIS。 如果您要修補和分發更新,則可能會受益於使用利用Windows Installer功能(msiexec)的安裝程序技術。

NSIS基本上是一個可以運行並執行所需功能的程序,而Windows Installer類型的安裝程序會強制您將應用程序拆分為可由Windows Installer msi服務管理的功能和組件。 MSI將跟蹤諸如您已安裝產品的哪個版本,是否再次運行安裝程序將在維護模式下運行,是否允許您安裝2個不同版本的產品,是否可以將補丁程序應用於產品的特定版本或諸如此類的信息。與更新和安裝有關的任何其他問題。

基本上,如果您要更改為Windows Installer技術,則可以立即使用您要求的大多數內容。 而如果您使用NSIS(不使用Windows Installer技術),則必須自己全部實現。

例如,有一個非常全面的安裝程序生成器,稱為AdvancedInstaller( http://www.advancedinstaller.com/ ),聽起來像您想要的。 另外,如果您想度過余生,在論壇和新聞組中度過一生,那么有一個名為WiX的開源產品可以完成類似的工作;)

盡管有我之前的評論,我還是使用帶有13個自定義頁面的NSIS編寫了5000行安裝程序。 我什至看過補丁程序,這有點駭人聽聞。 建議的主要內容是確保正在修補您認為要修補的版本,然后使用可用的修補插件之一。

有幾種修補技術可以比較文件並生成補丁更改文件以及“安裝”它們所需的NSIS代碼。 我發現NSIS Patch Gen以最少的麻煩就很好地完成了我想要的工作。 文檔有點薄,但是一旦弄清楚了,您就會覺得“哦,是的”。

自動生成的變更日志可能會給您帶來一些麻煩。 我建議您自己創建更改日志(或至少對您所做的每個應用程序更改添加額外的更改),並像正常應用程序文件一樣包含它,並讓補丁生成器對其進行更新。

http://sourceforge.net/projects/nsispatchgen/

一種可能的方法是在下載服務器上存儲一個XML文件,該文件具有每個已發布的版本以及每個版本已更改的文件列表。 安裝程序將在安裝安裝的文件版本時寫一個注冊表項。

然后,在更新時,安裝程​​序將下載並解析XML文件,並查找所有版本號高於當前安裝版本的節點。 您將所有文件顯示在安裝程序頁面上的文本框中,當用戶確認時,安裝程​​序將下載所有文件,然后將注冊表更新為最新版本。

您熟悉cURL嗎? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl

它會下載任何協議,您可以使用它來下載文件。 這是一個命令行應用程序。

在安裝程序中,安排一個程序,該程序應首先檢查主程序是否正在運行,如果未運行則退出,然后調用curl從您的站點下載包含更新的批處理文件,然后運行該批處理文件。
它下載的批處理文件通過使用curl下載正確的文件來更新應用程序。 該過程可能每2周運行一次,或者每月運行一次,具體取決於您更新的頻率。

安裝程序的卸載部分應能夠刪除有問題的應用程序的所有部分,包括所有更新。 這可以通過從程序文件的該子目錄中刪除所有文件來實現。

RMDir /r /REBOOTOK '$INSTDIR'
RMDir /r /REBOOTOK "$SMPROGRAMS\$StartMenuFolder"
Delete '$SMPROGRAMS\$StartMenuFolder\gpl3license.lnk'
Delete '$SMPROGRAMS\$StartMenuFolder\readme.lnk'
Delete '$SMPROGRAMS\$StartMenuFolder\${PRODUCT_TITLE}.lnk'
DeleteRegKey HKCU "Software\Your major subkey\${PRODUCT_NAME}"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
DeleteRegKey /ifempty HKCU "Software\${PRODUCT_NAME}"

PRODUCT_NAME是我定義的!因為我將這些nsi文件用作模板。 這只是安裝程序文件的卸載程序部分的一部分。

通過將應用發布到我的個人CDN(或某些托管平台)並利用Node.js模塊(如path ),我已經能夠為Windows應用(使用NSIS作為其安裝程序的CLI)創建補丁更新程序。用CDN和winreg的給定版本替換二進制文件(使用與equinox.io類似的過程)以相應地更新Windows注冊表。 由於已為Windows注冊表項命名空間,因此卸載程序仍然可以使用。

如果有人需要更多詳細信息,請詢問。 我很樂意提供幫助。

諸如Delphi之類的某些編譯器在最終可執行文件中進行了很多更改,即使您只更改了一部分代碼。

因此,首先您應該看看是否值得修補。

另一個考慮因素是打補丁。 修補程序可能被某些系統文件夾中的某些防病毒軟件阻止了。

最后,增量修補數據的大小可能會超出原始文件。

基於以上主題,我建議您不要打補丁。 改用完整的安裝程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM