inno setup是不是判断文件是不是存在,然后弹出提示安装时是不是覆盖文件,根据提示安装程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inno setup是不是判断文件是不是存在,然后弹出提示安装时是不是覆盖文件,根据提示安装程序?相关的知识,希望对你有一定的参考价值。

参考技术A 路径装对的话它就会提示是否覆盖文件,然后点是就覆盖安装了。说明安装路径正确追问

我想问的是,能不能像一些高级语言那样,if...else,如果选择是就覆盖安装,选择否就不安装?

将 Inno Setup 安装程序包装在 MSI 中以便通过 AD 进行分发是不是可行/明智?

【中文标题】将 Inno Setup 安装程序包装在 MSI 中以便通过 AD 进行分发是不是可行/明智?【英文标题】:Is it feasible/sensible to wrap an Inno Setup installer inside an MSI for easier distribution via AD?将 Inno Setup 安装程序包装在 MSI 中以便通过 AD 进行分发是否可行/明智? 【发布时间】:2010-09-09 10:19:03 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

好吧,尽管这个回复是相当明目张胆的广告(专业版不是免费的),我还是要把它交给你,这是一个很好的工具,我工作的公司也为你的 Pro最后的版本。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

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

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(澳大利亚:06.08/15.10.2008)文章:MSI-Pakete mit Open-Souce-Software erzeugen

http://entwickler-magazin.de/

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

【讨论】:

这通常是公司选择了良好的部署技术但客户仍然坚持使用 MSI 的问题。至于“Windows 安装程序应该是您安装的唯一技术”,这是非常主观的。【参考方案5】:

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

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

【讨论】:

嗨,Jack,Inno 确实不支持开箱即用,但 INF 文件只是一个简单的 INI 文件,Inno 对读取和写入这些文件具有出色的支持。您只需要从 Inno 命令行解析 INF 文件名...【参考方案6】:

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

但如果你真的想...

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

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

【讨论】:

【参考方案7】:

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

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

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

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

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

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

他们两个在功能上甚至都不是很接近,在我看来,与 windows 安装程序相比,inno 设置完全偏离了路线。

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

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

【讨论】:

【参考方案8】:

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

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

    创建调用的 install.bat

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

    你可以使用 /verysilent 您可以使用 /LOADINF="silent.inf"

    从silent.inf 加载设置

    创建调用 install.bat 的 MSI 设置文件(必要时带有参数)

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

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

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

不要走这条路。

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

【讨论】:

以上是关于inno setup是不是判断文件是不是存在,然后弹出提示安装时是不是覆盖文件,根据提示安装程序?的主要内容,如果未能解决你的问题,请参考以下文章

Inno Setup:验证是不是安装了 .NET 4.0

高分请教Inno Setup 编译器高手

inno setup怎么检测系统是不是安装了vcredist

inno setup检查dotnet core是不是已安装[关闭]

Inno Setup 检查是不是安装了杀毒软件

用inno setup或者其他软件打包exe程序 怎么防止重复安装的问题