".msi"和"setup.exe"文件之间的具体区别是什么?"

240

我搜索了很多,但所有的答案都是猜测的。请帮我找到确切的答案。


9
为什么很多程序都有setup.exe和setup.msi两个安装文件呢? - rds
7
这是一个更新的回答。请点击链接查看完整内容:http://www.stackoverflow.com/a/23815524/129130 - Stein Åsmul
我想安装一个同时带有EXE和MSI安装程序的程序。我首先从MSI安装,但它只安装了程序文件(没有任何前提条件或依赖项,并且没有创建开始菜单图标)。当我手动启动程序时,它失败并显示某些DLL缺失。从EXE安装还安装了其他东西,产品运行得很好。如果软件制造商提供安装的EXE和MSI选项,我建议使用EXE。 - James L.
4个回答

295

MSI是Windows Installer数据库。Windows Installer(与Windows一起安装的服务)使用它在您的系统上安装软件(例如复制文件,设置注册表值等)。

setup.exe可以是引导程序或非msi安装程序。非msi安装程序将从自身提取安装资源并直接管理其安装。引导程序将包含一个MSI而不是个别的文件。在这种情况下,setup.exe将调用Windows Installer以安装MSI。

您可能希望使用 setup.exe 的一些原因:

  • Windows Installer仅允许同时安装一个MSI。这意味着很难安装其他MSI(例如依赖项,如.NET框架或C ++运行库)的MSI。由于setup.exe不是MSI,因此可以用于按顺序安装多个MSI。
  • 您可能希望更精确地控制安装的管理方式。 MSI有非常具体的规则,用于管理安装、升级和卸载。 setup.exe完全控制软件配置过程。只有在您真正需要额外控制时才应这样做,因为这是很多工作,而且很难做到正确。

12
我本来要打这个 - 这可能是他正在寻找的东西。 - Mongoose
2
根据我的经验,与构建基于exe的安装程序相比,构建MSI安装程序需要大量工作。这在很大程度上取决于您首先用于构建安装程序的工具。不幸的是,我见过的所有基于MSI的安装程序工具都是商业GUI工具或复杂的WiX工具。两者都不特别适合我的需求(即使用脚本自动构建安装程序)。 - craftworkgames
1
所以我仍然在想为什么需要 MSI。当 exe 看起来运行良好时,它试图解决什么问题? - The Muffin Man
1
@TheMuffinMan MSI是一个专门用于软件安装的框架,不同于“.exe”仅仅是一个可执行文件。MSI在其内部具有规范,更有效地处理向计算机编写软件的过程。 - jon.bray.eth
3
安装程序很难做到完美。有很多需要考虑的事情,对于从未制作过安装程序的人来说可能不太清楚,特别是卸载、升级、修复和修改已安装软件等方面。MSI提供了一个框架,使得制作更可靠、一致的安装程序更容易实现。用户在安装任何软件时都应该有类似的体验,而如果没有像MSI这样的框架提供和强制执行标准,这就很难做到。只要用户继续安装软件,我认为就会需要这样的框架。 - Kevin Kibler

17

.msi 文件是没有 Windows 安装程序运行时的 Windows 安装程序文件,而 setup.exe 则可以是任何可执行程序(可能是安装软件到您的计算机上的程序)。


15

MSI 是一种安装文件,可将程序安装到执行系统上。

Setup.exe 是一个应用程序(可执行文件),其中 msi 文件是其资源之一。执行 Setup.exe 将依次执行 msi(安装程序),该程序会将您的应用程序写入系统中。

编辑(根据评论建议):设置可执行文件内部不一定有 MSI 资源。


1
安装可执行文件内部不一定有MSI资源。 - jkmartindale

-11

MSI 基本上是 Microsoft 内置于 Windows 中的安装程序。它将组件与功能关联,并包含安装控制信息。这个文件不一定包含实际用户所需的文件,即用户期望的应用程序。MSI 可以在其内部包含另一个 setup.exe,而 MSI 包装的实际上是包含用户所需文件的文件。

希望这能解决您的疑惑。


15
这段话有些混淆并且一般是错误的——因为 MSI 文件通常不会封装 setup.exe 文件,而恰恰相反。 - Flak DiNenno
1
“MSI 可以包含另一个 setup.exe,而 MSI 将其包装起来” 是不正确的!相反,正确的是:.exe 文件内部有一个 .msi 文件。 - ONE

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