如何使用NSIS创建更新安装程序?

时间:2009-06-13 09:26:49

标签: installer windows-installer nsis

我目前有一个项目,其中包含我使用NSIS制作的安装程序,但我希望对只有已更改文件并将显示更改日志的新版本进行更新。目标平台是windows。你有什么方法/建议吗?

6 个答案:

答案 0 :(得分:14)

您可能想重新考虑使用NSIS。如果您要修补和分发更新,则可能会从使用利用Windows Installer功能的安装程序技术(msiexec)中获得最大收益。

NSIS基本上是一个运行并执行您想要的程序,而Windows Installer类型安装程序会强制您将应用程序拆分为可由Windows安装程序msi服务管理的功能和组件。 MSI将跟踪您已安装的产品版本,是否再次运行安装程序将以维护模式运行,是否允许安装2个不同版本的产品,是否可以将补丁应用于特定版本的产品或与更新和安装有关的任何其他问题。

如果您更改为Windows Installer技术,基本上您要求的大部分内容都是开箱即用的。如果您使用NSIS(不使用Windows Installer技术),那么您必须自己实现它。

就像一个例子,有一个非常全面的安装程序构建器,名为AdvancedInstaller(http://www.advancedinstaller.com/),听起来像你想要的。 或者,如果你想花费你的余生拖网论坛和新闻组,那么有一个名为WiX的开源产品可以做类似的事情;)

答案 1 :(得分:3)

尽管我之前的评论,我已经使用NSIS编写了一个5000行安装程序,其中包含13个自定义页面。我甚至看过修补,这有点像黑客。建议的主要内容是确保修补您认为正在修补的版本,然后使用其中一个修补插件。

有几种修补技术可以比较文件并生成修补程序更改文件和“安装”它们所需的NSIS代码。我发现NSIS Patch Gen以最少的麻烦做了我想要的。文档有点薄,但一旦你搞清楚,你就会想到“哦,是的。”

使用自动生成的更改日志可能会遇到一些麻烦。我建议您自己创建更改日志(或者至少在您进行的每个应用程序更改时添加更改日志),并将其包含在内,就像它是一个普通的应用程序文件一样,让补丁生成器更新它。

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

答案 2 :(得分:2)

一种可能的方法是在下载服务器上存储XML文件,该文件包含每个发布的版本以及针对每个版本更改的文件列表。安装程序会在安装它安装的文件版本时编写注册表项。

然后,在更新时,安装程​​序会下载并解析XML文件,并查找版本号比当前安装的版本号更高的任何节点。您在安装程序页面的文本框中显示所有文件,当用户确认时,安装程​​序将下载所有文件,然后将注册表更新为最新版本。

答案 3 :(得分:1)

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

它将下载任何协议,您可以使用它来下载文件。这是一个命令行应用程序。

在安装程序中,安排一个应首先检查主程序是否正在运行的程序,如果没有正在运行则退出,调用curl从您的站点下载包含更新的批处理文件,然后运行批处理文件 它下载的批处理文件通过使用curl下载正确的文件来更新应用程序。 该过程可能每两周或每月一次运行,具体取决于您更新的频率。

安装程序的卸载部分应该能够删除相关应用程序的所有部分,包括任何更新。这可以通过从程序文件的子目录中删除所有文件来完成。

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文件就像模板一样。  这只是安装程序文件的卸载程序部分的一部分。

答案 4 :(得分:0)

一些编译器(如Delphi)在最终可执行文件中进行了大量更改,即使您更改了代码的一小部分。

首先,您应该看看它是否值得修补。

另一个考虑因素是单独修补。 某些系统文件夹中的某些防病毒软件可能会阻止修补。

最后增量修补数据大小可以超出原始文件。

基于以上主题,我不建议您修补。 请改用完整安装程序

答案 5 :(得分:0)

通过将应用发布到我的个人CDN(或某些托管平台)并利用Node.js模块,我已经能够为Windows应用(使用NSIS作为其安装程序的CLI)创建补丁更新程序。例如path用CDN中的给定版本替换二进制文件(使用与equinox.io类似的过程),而winreg则相应地更新Windows注册表。由于已为Windows注册表项命名空间,因此卸载程序仍适用于此。

如果有人需要更多详细信息,请询问。我很乐意提供帮助。