使用Delphi 7构建安装程序的用途是什么?

Jer*_*dge 2 delphi installer delphi-7

(注意:下面添加了"重要编辑",基本上以不同的方式重新提出这个问题)

我知道有很多不同的软件包可以放在delphi应用程序中进行软件安装.我不需要任何花哨的东西,我只需要能够做一些基本的安装例程,比如正确安装/替换DLL.我可以手动完成大部分安装,例如复制文件,保存注册表设置等.我只需要使安装程序正确地使用Windows(或更新的软件)注册新软件.

例如,如果在尝试替换文件之前检查文件当前是否正在使用它也会很有帮助.没有任何视觉需要,必须有某种简单的非可视组件,可以处理这些常见的例程.如果可能的话,它也应该是免费的开源.我不想用我的安装程序分发一堆DLL或其他第三方文件.

有什么好建议吗?请不要回答任何庞大复杂的花式安装程序系统.它只需要在Delphi中直接使用就可以了.它甚至不必是一个组件,甚至只是一个单元或具有某些功能的单元库,以帮助自动化这些常见的安装点.

补充说明:我已经有一个在delphi-7中制作的安装程序,但是我希望能在我的项目中添加一些内容,包括安装软件最常见部分的任何类型的帮助.


重要编辑:

我认为这个问题的方法是错误的.请允许我重新详细说明......

我们公司已经有一个简单的更新工具.实际上,这不是"安装程序",而是"更新程序"程序.它只是替换了一些EXE文件,执行SQL语句(MSSQL服务器),编写一些注册表项等等......

以下是我对该计划目前的工作方式所面临的问题:

  • 在尝试替换DLL时,DLL可能正在使用中,因此90%的时间无法替换DLL.我需要一些可以检查DLL是否正在使用的东西,并且(如果可能的话)要么强行替换DLL,要么告诉Windows在下次重启时替换DLL.
  • EXE名称是"Setup.exe",Windows 7会自动将其识别为安装程序(并认为它无法安装).我知道有这方面的解决方法,事实上,我最近在stackoverflow上看到了这个问题的一个问题.我想看看是否已经准备好了我能得到的任何东西可以解决这个问题,而不是我手动完成工作.
  • 这是我正在使用的服务器/客户端系统.如果安装在服务器上,则还需要更新(替换)服务EXE.我知道如何启动/停止服务,但在等待服务停止时遇到很多困难,然后替换文件,然后重新启动它.我想看看这是否可以实现自动化.
  • 执行一个大的SQL脚本(我的意思是在这个脚本中超过25,000行)是地狱,并且没有一半时间工作.它包括许多"GO"实例,这些实例无法被标准组件识别,例如ADO.我可以使用批处理文件来执行此操作,但这比我感觉更糟糕.必须有一种方法可以在不使用批处理文件的情况下执行这样的脚本 - 尤其是读取结果并尝试识别更新中是否存在任何错误.
  • 此更新程序还将安装另一个第三方安装,特别是SQL Native Client Drivers.我想要一些已准备好启动另一个安装程序并等待其结果(成功或失败)的东西.如果失败,我需要知道以不同方式继续更新程序.

我能理解如何理解我所要求的东西.我不需要一个可以用于任何东西的解决方案.这是针对这一个软件,没有别的.我知道可能没有一个单一的解决方案可以涵盖上述所有内容,但任何帮助都会很棒.

Ken*_*ite 19

虽然它不是一个组件,但无论如何我都会发布这个.(当有很多替代方案时,尝试手动完成安装程序的工作是浪费你的时间,IMO,但如果你觉得这是不可接受的,可以随意投票给这个答案.)

InnoSetup非常出色,而且(奖金)是用Delphi编写的,并且有源代码可用.它可以在安装程序中完成您所需的一切(除了创建.msi文件,一些大型网络管理员需要这些文件 - 这不会影响您,因为您愿意自己编写大部分安装代码).

您需要获取IsTool GUI界面(可从下载页面获得),这使配置安装脚本变得更加容易.

另一个好处是:您可以使用它的Pascal Scripting功能扩展它.

  • 杰里,我使用GUI工具在10分钟内构建了非常简单的安装(创建文件夹,复制文件,创建文件关联).我还创建了具有自定义配置,可选附加组件,系统配置所需信息的安装,以确定需要安装的内容,单独的32和64个bilt安装,以及复杂的注册表项,以及可能的特定.net框架的可选下载版本,使用Pascal脚本逻辑确定是否需要安装的东西并返回用于下载它们的URL).再次,它完成了100%的来源. (4认同)
  • 我的2美分......我们的项目安装人员之一完成了OP编辑中的所有要点 - 全部都是Inno.但是我们使用Inno调用一个小的Delphi程序来进行SQL更新,因为使用Delphi更容易管理.我们只从同一个脚本进行完整安装或升级; 运行自定义帮助程序DLL; 如果需要,安装Microsoft可再发行组件; 替换事件管理器资源DLL; 停止/替换/重新启动服务器服务.等待服务停止并被Windows发布是一个问题,但它是可行的.Inno是小型和大型装置的小孩! (2认同)
  • @JerryDodge,如果vanilla Inno Setup对你来说太多(或太少),写一些提供你需要的确切灵活性的东西,但这样做会产生一个ISS脚本,而不是实际的安装程序.为了记录我正在使用Inno来安装/升级Firebird SQL服务器.这包括确定它是否已经安装,是否需要升级,停止服务,运行Firebird的安装程序,更新UDF DLL,重新启动服务器. (2认同)
  • InnoSetup也是一个神话般的UPDATER,而不仅仅是一个安装程序.事实上,它比几乎任何其他工具更适合UPDATING,因为它稳定,功能强大,体积小.那就是更新者应该是的. (2认同)