将 Inno Setup 安装程序包装在 MSI 中以便通过 AD 更轻松地分发是否可行/明智?

StackOverflow https://stackoverflow.com/questions/71203

  •  09-06-2019
  •  | 
  •  

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

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

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

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

附:我们这里也有 MSI 的 WISE 旧版本,但这种经验实际上是我们开始使用 Inno 的原因......

有帮助吗?

解决方案

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

简而言之,为了向您的客户提供他们想要的东西(即 MSI 通过 AD 带来的部署简便性),您需要“适当的”MSI。祝你好运,恕我直言,这是一个很大的痛苦。但一旦你掌握了 MSI 和 WiX,它确实会给出很好的结果。

其他提示

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

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

您可以在 http://www.exemsi.com (基础版免费)

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

回应您的编辑:是的,您所描述的内容将阻止进行升级(删除/重新安装除外)和远程配置,因为 MSI 数据库不会知道有关安装程序内容的任何信息。

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

制作一个自动安装来自 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 安装程序,每个人都很高兴:)

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

但如果你真的想...

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

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

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

如果你混合使用,你会遇到卸载内容的第一个问题。如果不进行任何更改,您将获得程序的 2 个卸载程序。

“entwickler magazine”中有一些以 windows installer 开头的文章

  • Entwickler 杂志(Ausgabe:03.09/15.04.2009)文章:MSI-PAKETE MIT开发软件Erzeugen Teil 4
  • Entwickler 杂志(Ausgabe:02.09/12.02.2009) 文章:MSI-PAKETE MIT开发软件Erzeugen Teil 3
  • Entwickler 杂志(Ausgabe:01.09/10.12.2008)文章:MSI-PAKETE MIT开放式软件软件Erzeugen Teil 2
  • Entwickler 杂志(Ausgabe:06.08/15.10.2008)文章:MSI-Pakete mit Open-Souce-Software erzeugen

http://entwickler-magazin.de/

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

将 Inno Setup 封装在 MSI 包中并不是一项简单的任务。然而,这是可能的。有很多免费工具可用于执行此操作。您应该选择一种还支持卸载和升级的产品。

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

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

使用这种方法,AD 和 Windows Installer 会被愚弄,就像处理正确的 MSI 安装一样,但事实并非如此,它们一开始就会对您产生适得其反的效果。

别走这条路。

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

尽管最后的评论是可行且可行的,但转向 MSI 是处理此问题的最佳方法。

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

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

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

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

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

它们两个在功能上甚至相差甚远,在我看来,与 Windows 安装程序相比,inno setup 完全偏离了路线。

它能创建成功的安装程序吗?是的,很容易使用吗?是的,它会创建好单个安装程序吗?是的是企业的最佳选择吗?不

微软最早开发的工具“短信安装程序”是10年前的innosetup。安装领域发生了巨大的变化,而 inno setup 根本跟不上这种变化的步伐。

我需要在silent.inf(不是稳定的inno设置设置值)上输入一个客户值,看起来LOADINF允许这样做。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top