将NSIS脚本构建为MSI包

39

有没有办法将Nullsoft Installer Script(NSI)的安装程序编译为MSI包而不是EXE?

3个回答

32

很遗憾,不可以。

NSIS 允许您创建可脚本化的过程式安装包。它简单易用,并且具有一些在 Windows Installer 中不存在的功能。

Windows Installer (MSI) 创建基于数据库的事务性安装包。正确编写的 Windows Installer 安装包非常健壮,如果文件损坏/删除,它将自动重新安装。Windows Installer 知道 UAC(用户帐户控制),只会在必要时提升权限。基本上,如果您为企业市场创建软件,您需要提供 MSI 文件。

查看 The Definitive Guide to Windows Installer 以了解 MSI 的入门知识。


此外,MSI存在许多问题--例如,您需要为x86和x64创建单独的安装程序(其中之一),还有一个例子:MSI可以始终提升权限或永不提升权限--它不能同时做到这两点。我想NSIS不存在这些限制。 - BrainSlugs83
1
@BrainSlugs83,请查看MSI系列中的UAC。如果您正确编写,就没有限制了 :) http://blogs.msdn.com/b/rflaming/archive/2006/10/01/uac-in-msi-notes-how-to-build-packages-that-work-for-both-standard-user-and-per-machine.aspx - saschabeaumont
另一个好处是利用将MSI包装在NSIS中。当IT部门将Windows Installer服务设置为禁用(或手动)时,这非常有用。您可以让NSIS安装程序检查此项,启用服务,然后提取并执行您的MSI。 无论如何,这是一篇很好的文章,@saschabeaumont - Damian

29

使用MSI包装器可将NSIS安装程序包装成MSI文件。这是一款小工具,适用于包装NSIS和Inno Setup安装程序。它使用WiX编译MSI,但提供了图形界面来代替XML文件。

我制作该工具是因为我需要一个基于传统EXE安装程序创建MSI文件的工具。我需要卸载和升级支持,并且只希望打包安装程序出现在控制面板的“添加/删除程序”中一次。

我还希望能够在安装MSI时向包装安装程序传递命令行参数。

如果您想使用它或帮助我改进它,请访问http://www.exemsi.com

我认为将可执行安装程序包装为MSI文件不是理想的解决方案。但是,当您已经拥有exe时,使用该工具就非常有意义 :-)


天啊!这应该内置到NSIS中!现在试一下。 - BrainSlugs83
2
“Holy crap”是这个模式的一个好描述。它根本就没有意义...抱歉。 - Christopher Painter
1
不,这很有道理 - 一些企业部署方法要求使用MSI,因此需要将其封装为MSI。 - Sean Kearon

14

不支持.MSI输出(未来也没有计划支持),请尝试使用WIX


3
很高兴将WiX作为一种备选方案放进去 :) - Matt Clarkson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接