我该如何创建一个MSI安装程序?

87

我多年来一直使用Inno Setup为我的所有Delphi工具创建安装程序。现在有些用户更喜欢MSI安装包,这样他们就可以从中央服务器部署安装程序到所有工作站。

我该如何创建一个MSI安装程序?我必须购买Visual Studio或其他产品吗?


9个回答

58

Wix 学习曲线有点陡峭,但它无疑是生成 MSI 文件最可靠的方式。 - Stein Åsmul
3
这是一个"使用Wix启动链接"清单。 - Stein Åsmul
我已经使用WiX大约两年了。我必须说,学习如何使用它时有点烦人。但是一旦你理解了它,就没问题了。但是我正在尝试将生成的msi添加到自定义.exe中,但没有成功...你知道怎么将结果.msi嵌入到自定义setup.exe中吗? - Sonhja
@Sonhja 这是一个非常好的问题。你应该考虑在Stackoverflow上单独提出这个问题。 - mezoid
2
不妨看看WixSharp,它可以让你用C#代码编写安装程序,而无需手动修改XML。 - Daniel

17

如果您不了解 Windows Installer,我强烈推荐阅读《Windows Installer 完全指南》。如果不理解 MSI,就无法真正使用WiX。同样值得下载的是Windows Installer 4.5 SDK

如果您不想学习 Windows Installer 的基础知识,那么您需要一些向导类型的软件包来隐藏所有琐碎的细节并提供帮助。有许多选项,一些更昂贵。

  • InstallShield
  • Advanced Installer
  • MSI Factory
  • 等等..

然而,我仍建议您阅读上述书籍,并花些时间了解“底层”发生了什么,这将帮助您找出客户在安装过程中出现问题时,究竟是哪里出了错 :)


15

5
NSIS 不创建 MSI 安装包,对吧?(我有一段时间没有检查过了) - Thorsten Dittmar
嗯...... Winamp的安装程序是.msi格式。并由NSIS:D创建。 - Timotei
3
关于在NSIS中创建MSI的问题,请参考此问题。简而言之,这是不可能的,也不会得到支持。https://dev59.com/6nI-5IYBdhLWcg3wbXtN - jonathan
1
如果你有足够的资金购买专业版,AdvancedInstaller是非常好的,它可以使签名成为部署周期的一部分。NSIS不能制作.msi文件,并且需要一些脚本才能正常工作,但它可以完成安装和卸载的工作。 - hg.

14
在Visual Studio(包括免费的社区版本)中,您可以安装Microsoft Visual Studio Installer Projects扩展[1],该扩展允许您创建MSI安装包。要从Visual Studio中安装它:
1.在菜单栏中转到“Extensions”->“Manage Extensions” 2.在搜索框中搜索“Installer Projects” 3.选择“Microsoft Visual Studio Installer Projects”并点击“Download” 4.重新启动Visual Studio
一旦安装了扩展,您将创建一个包含所有MSI文件和设置的新项目。要执行此操作:
1.在菜单栏中转到“File”->“New”->“Project” 2.更改可见的下拉菜单以显示“All languages”,“All platforms”和“All project types” 3.在项目类型列表中向下滚动,在底部选择“Setup Wizard: Create a Windows Installer project with the aid of a wizard.” 4.点击“Next”。
按照提示进行工作,选择安装程序项目名称和位置。在第2步中选择“Create a setup for a Windows application”,在第3步中选择应包含在MSI中的可执行文件和其他文件(点击“Add..”)。最后,点击“Create”。
要构建实际的MSI,请在顶部菜单中转到“Build”->“Build Solution”,然后您应该在输出窗口中看到以下消息:
Build started...
------ Starting pre-build validation for project 'Setup1' ------ 
------ Pre-build validation for project 'Setup1' completed ------
------ Build started: Project: Setup1, Configuration: Debug ------
Building file 'C:\Users\zelda\Source\Repos\Setup1\Setup1\Debug\Setup1.msi'...
Packaging file 'test.exe'...
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
默认情况下创建的是非常基本的MSI,但是如果需要其他配置,例如创建自定义操作、添加/更改注册表键、配置与MSI相关联的用户界面等,请参阅完整文档[2]。
[1] https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects [2] https://aka.ms/vdproj-docs

我选择了这个,因为它是我现有项目中的内容,但是项目文件无法加载。所以我按照这个做,然后看到安装程序项目现在被加载了。 - user3856437

13

8
你可以使用“Visual Studio安装程序项目”及其免费的功能...
这很容易创建安装程序并具有GUI。(大多数免费的MSI创建工具没有GUI部分)
你会在互联网上找到许多教程,轻松创建安装程序
要安装,请在Visual Studio中搜索Visual Studio Installer Project
Visual Studio->工具->扩展和更新->搜索Visual Studio Installer Project。下载并享受...

很好。谢谢。这是最简单的安装程序。 这里有一个视频,介绍如何安装和使用它:https://www.youtube.com/watch?v=fehVTLNQorQ - Dmitry Dronov

2
寻找 Windows Installer XML (WiX)。

1
在我看来,你应该使用Wix#,它可以很好地隐藏构建MSI安装包的大部分复杂性。它允许你使用比WiX更简单的语言执行所有可能的自定义操作。

1

您可以购买InstallShield,这是创建安装包的市场领导者。它提供了许多免费解决方案所不具备的功能。

警告:InstallShield价格极高!


4
Installshield非常不稳定,这是一个很大的缺点。另一个选择曾经是Altiris的Wise安装程序,但我认为现在已被赛门铁克收购。安全的选择是使用Wix,它完全能胜任,免费且值得学习。 - Stein Åsmul
我应该澄清一下,Installshield中的错误集中在有问题的Installscript MSI项目类型中。 - Stein Åsmul

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