28

我们的安装程序是用 Inno Setup 编写的,我们实际上对此非常满意。然而,一些客户不断要求他们可以更轻松地通过 Active Directory 分发的 MSI 安装程序。/LOADINF通过使用我们自己的选项扩展 Inno Setup 的机制,我们已经竭尽全力使安装程序能够很好地处理自动和无人值守的安装。

为了满足要求 MSI 的客户,我一直在考虑将我们的常规安装程序简单地包装在一个可能使用 WIX 创建的 MSI 中。问题是:我可以保持我们当前安装程序提供的高可配置性吗?在无人值守/大规模安装场景中,我将如何通过外部 MSI 公开 Inno Setup 安装程序的选项?

请注意,我自己还没有真正深入研究 MSI-creation 和 WIX。现在我只对知道他们在说什么的人是否认为这将是一种可行/明智的方法来首先投入我们的精力感兴趣......

[编辑:] 最初我认为我可以使用临时提取和执行方法,即 MSI 将简单地用作将 Inno 安装程序传送到目标 PC 并在/VERYSILENT-mode 下执行它的容器。但我想要求 MSI 的客户也希望能够从中心位置卸载甚至修改安装,我想在那种情况下这是不可能的,对吗?

PS:我们这里也有旧版的 WISE for MSI,但那次经历实际上是我们开始使用 Inno 的原因...

4

10 回答 10

18

不,没有办法在保持客户“隐含”要求的功能的同时做到这一点。您可以在 MSI 中做的唯一“包装”是在安装时将其解压缩并从您解压缩到的临时位置启动 InnoSetup 安装程序。MSI 是一种完全不同的工作方式:InnoSetup(和 NSIS 和大多数其他安装程序)采用以代码为中心的方法:您“编程”安装数据的“步骤”。MSI 是一个数据库,采用“以数据为中心”的方法:您指明应该安装哪些文件,其余的由 MSI 的“运行时”完成。这使您可以进行版本控制并精确控制去往何处。

简而言之,要为您的客户提供他们想要的东西(即,MSI 为 AD 带来的易于部署),您将需要“合适的”MSI。祝你好运,恕我直言,这是一个主要的痛苦。但是,一旦您掌握了 MSI 和 WiX,它确实会产生良好的效果。

于 2008-09-16T11:11:48.097 回答
13

我自己也遇到过很多次这个问题。因此,我创建了一种解决此问题的标准方法,并生成了一个向导,将指导您完成这些步骤。该工具将支持以下内容:

  1. 将 exe 包装在 MSI 中。
  2. 支持卸载。
  3. 在“添加或删除程序”中只显示一个程序。
  4. 当您使用 MSIEXEC.EXE 运行 MSI 程序包时,允许您将命令行参数(例如 /SILENT)传递给嵌入式安装程序。

您可以在http://www.exemsi.com获得它(基本版是免费的)

使用我的联系表格,让我知道您的想法 :-)

于 2012-08-22T19:32:55.770 回答
1

作为对您的编辑的回应:是的,您所描述的内容将阻止进行升级(删除/重新安装除外)和远程配置,因为 MSI 数据库对您的安装程序的内容一无所知。

但是,许多安装程序包以这种方式启动 MSI“支持”:例如,InstallShield 就是这样做的。这就是我抛弃它们的主要原因,因为以这种方式制作的安装程序对于 MSI 而言毫无用处。我不知道最新版本的 InstallShield 是否更好,我上次检查是 5 年前。

于 2008-09-16T14:08:45.910 回答
1

制作一个自动安装来自 MSI 的 INNOSETUPper 的包装工具包非常容易。对于基本功能(安装/卸载),这就足够了。大多数安装程序无论如何都不会实施修复。

  1. 为 INNO 设置创建silent.inf 脚本(可选)

  2. 创建调用的 install.bat

    myinnosetup.exe /silent /NOCANCEL /norestart /Components="xxx"

    您可以使用 /
    verysilent 您可以使用 /LOADINF="silent.inf" 从silent.inf 加载设置

  3. 创建调用 install.bat 的 MSI 安装文件(如有必要,带有参数)

  4. 将所有 4 个文件交付给您的客户,他们可以使用 SMS 或 ActiveDirectory 部署您的 Inno setupper,每个人都很高兴 :)

于 2008-10-14T13:21:31.610 回答
1

我认为使用 MSI 包装的 Inno Setup 可以完成所有您想做的事情,但这绝非易事,而且使用 WiX 可能会使这项特定任务变得更加困难。简而言之,我不会真的推荐它。

但如果你真的想...

MSI 文件只是带有附加脚本指令的数据库文件,通常嵌入包含您实际要安装的内容的 .cab 文件。

如果您使用 Wise,您将生成默认脚本,然后您可以添加 Windows Installer 条件并更好地控制事件(安装、修复、修改、卸载),以便它们在您的 Inno Setup 安装脚本上调用等效操作,这将需要安装并保存在一个临时文件夹中。

于 2009-02-03T22:08:48.290 回答
1

混合安装技术是没有意义的。

如果您正在混合,您会遇到卸载内容的第一个问题。无需更改,您将获得 2 个程序的卸载程序。

“entwickler 杂志”中有一些以 windows 安装程序开头的文章

  • Entwickler Magazin (Ausgabe: 03.09/15.04.2009) 文章: MSI-Pakete mit Open-Souce-Software erzeugen Teil 4
  • Entwickler Magazin (Ausgabe: 02.09/12.02.2009) 文章: MSI-Pakete mit Open-Souce-Software erzeugen Teil 3
  • Entwickler Magazin (Ausgabe: 01.09/10.12.2008) 文章: MSI-Pakete mit Open-Souce-Software erzeugen Teil 2
  • Entwickler Magazin (Ausgabe: 06.08/15.10.2008) 文章: MSI-Pakete mit Open-Souce-Software erzeugen

http://entwickler-magazin.de/

windows 安装程序应该是您安装的唯一技术。它的未来证明和稳定!

于 2009-08-07T14:10:11.160 回答
1

将 Inno Setup 包装在 MSI 包中并非易事。但是,这是可能的。有很多免费工具可用于执行此操作。您应该选择一个也支持卸载和升级的。

我发现只有一个支持升级和卸载的免费工具。查看http://www.exemsi.com/inno-setup-and-msi

于 2013-02-17T19:36:18.907 回答
0

这样做几乎等同于交付一个 ZIP 文件并在安装结束时调用 unzip。

使用这种方法,AD 和 Windows Installer 会被愚弄,就好像处理正确的 MSI 安装一样,但事实并非如此,它们会在第一次时适得其反。

不要走这条路。

无论如何,WiX 是优于 InnoSetup 的工具集,因此您花在学习和移植上的时间将通过更好地支持协作而得到回报。

于 2008-09-16T12:26:43.813 回答
0

尽管最后一条评论是可行且可行的,但移至 MSI 是处理此问题的最佳方法。

几乎所有大型组织都只规定 MSI,原因有很多。

1) 首先是易于部署 2) 对某些人来说更重要的是应用程序社交性 3) 自我修复

没有实现 Windows Installer 的 inno setup 和其他此类工具根本无法以与 Windows Installer 相同的方式提供应用程序社交性。

您必须了解 Inno setup 是旨在部署单个应用程序的软件。

Windows Installer 是一个完整的框架,用于处理社交性、用户模拟、用户提升、自我修复、用户配置文件修复。

他们两个在功能上甚至都不是很接近,在我看来,与 Windows 安装程序相比,我的任何设置都完全偏离了轨道。

它可以创建成功的安装程序吗?是 容易使用吗?是的 它是否创建了良好的单一安装程序?是 是企业的最佳选择吗?不

微软“SMS Installer”最早开发的工具是10年前的innosetup。安装世界的情况发生了翻天覆地的变化,inno setup 根本没有跟上这种变化的步伐。

于 2008-10-24T01:17:28.180 回答
0

我需要在silent.inf 上输入一个custome 值(不是一个稳定的inno setup 设置值)看起来像LOADINF 允许的那样。

注意:如果您使用 makemsi,则不必包含 bat,因为您可以使用 $WrapInstall。

于 2009-05-13T14:29:32.940 回答