代码之家  ›  专栏  ›  技术社区  ›  Oliver Giesen

在MSI中包装一个Inno安装程序是否可行/合理,以便于通过AD进行分发?

  •  24
  • Oliver Giesen  · 技术社区  · 16 年前

    我们的安装程序是用inno安装程序编写的,实际上我们对此非常满意。然而,一些客户一直在要求一个MSI安装程序,他们可以更容易地通过Active Directory分发。我们已经竭尽全力让安装程序通过扩展Inno安装程序的 /LOADINF -机制有我们自己的选择。

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

    请注意,我还没有真正深入到MSI创建和Wix的实际工作。现在,我只关心那些知道自己在说什么的人是否认为这是一个可行/明智的方法,首先把我们的能源投资于……

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

    P.S.:我们这里也有一个WISE for MSI的旧版本,但这一经验实际上是我们开始使用Inno的原因。

    10 回复  |  直到 6 年前
        1
  •  16
  •   Jens A. Koch    9 年前

    不,在保持客户“含蓄地”要求的功能的同时,无法做到这一点。在msi中唯一可以做的“包装”就是在安装时提取它,并从提取到的临时位置启动InnoSetup安装程序。MSI是一种基本上不同的工作方式:InnoSetup(大多数其他安装程序)采用以代码为中心的方法:您“编程”安装数据的“步骤”。MSI是一个数据库,采用“以数据为中心”的方法:您指示应该安装哪些文件,而MSI“运行时”则执行其余操作。这就为您提供了版本控制和精确控制。

    简而言之,为了满足客户的需求(即MSI随AD提供的易部署性),您需要“适当”的MSI。祝您好运,这是一个巨大的痛苦。但是,一旦您掌握了msi&wix,它就会产生很好的效果。

        2
  •  9
  •   Martin Ba    10 年前

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

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

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

    用我的联系表格告诉我你的想法:-)

        3
  •  1
  •   Roel    16 年前

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

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

        4
  •  1
  •   Tom    16 年前

    很容易制作一个包装工具包,它可以自动从MSI安装InnoSetupper。对于基本功能(安装/卸载),这就足够了。大多数安装程序都不执行修复。

    1. 为Inno安装程序创建silent.inf脚本(可选)

    2. 创建调用

      myinnosetup.exe/silent/nocancel/norestart/components=“xxx”

      您可以使用/verysilent
      您可以使用/loadinnf=“silent.inf”从silent.inf加载设置。

    3. 创建调用install.bat的msi安装文件(必要时使用参数)

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

        5
  •  1
  •   Rob Hunter    15 年前

    我认为,使用MSI封装的Inno安装程序可以实现您想要的所有操作,但这并不是一件简单的事情,使用wix可能会使这个特定的任务更加困难。简言之,我不会真的推荐它。

    但如果你真的想…

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

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

        6
  •  1
  •   coding Bott    15 年前

    混合安装技术毫无意义。

    如果你把第一个问题和卸载的东西混在一起。 如果不进行更改,您将获得程序的2个卸载程序。

    在“Entwickler Magazine”中有一些文章是从Windows Installer开始的

    • Entwickler Magazin(Ausgabe:03.09/15.04.2009)Artikel:MSI Pakete MIT开放源代码软件Erzeugen Teil 四
    • Entwickler Magazin(Ausgabe:02.09/12.02.2009)Artikel:MSI Pakete MIT开放源代码软件Erzeugen Teil 三
    • entwickler magazin(ausgabe:01.09/10.12.2008)artikel:msi pakete mit open souce software erzeugen teil 二
    • entwickler magazin(ausgabe:06.08/15.10.2008)artikel:msi-pakete-mit开放源代码软件erzeugen

    http://entwickler-magazin.de/

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

        7
  •  1
  •   J. Rasmussen    11 年前

    在MSI包中包装一个Inno安装程序并不是一项简单的任务。然而,这是可能的。有很多免费的工具可以用来做这件事。您应该选择一个也支持卸载和升级的。

    我只找到一个支持升级和卸载的免费工具。退房 http://www.exemsi.com/inno-setup-and-msi

        8
  •  0
  •   Vytautas Å altenis    16 年前

    这样做相当于在安装结束时传递一个zip文件并调用unzip。

    有了这样的方法,ad和windows安装程序会被愚弄得好像在处理正确的msi安装一样,但事实并非如此,它们会在第一次对您产生适得其反的影响。

    别往这边走。

    而且wix是InnoSetup的高级工具集,所以你花在学习和移植上的时间将得到更好的合作支持。

        9
  •  0
  •   john mcfadyen    16 年前

    虽然最后一条评论是可行的,但转移到MSI是处理这一问题的最佳方法。

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

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

    Inno安装程序和其他不实现Windows Installer的工具不能以与Windows Installer相同的方式提供应用程序的可关联性。

    您必须了解Inno安装是为部署单个应用程序而设计的软件。

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

    他们两个在功能上甚至没有远程的接近,在我看来,与Windows Installer相比,Inno的安装完全是一个完全不同的过程。

    它能创建成功的安装程序吗?对 它容易使用吗?对 它是否创建了优秀的单安装程序?对 它是企业的最佳选择吗?不

    最早由微软“SMS安装程序”开发的工具是10年前的InnoSetup。安装世界发生了巨大的变化,Inno安装程序根本没有跟上变化的步伐。

        10
  •  0
  •   Jack    15 年前

    我需要在silent.inf上输入一个客户值(不是一个稳定的inno设置值),就像loadinf允许的那样。

    注意:如果您使用makemsi,则不必包括BAT,因为您可以使用$wrapinstall。