【发布时间】:2011-12-01 03:25:37
【问题描述】:
(注意:在下面添加了“重要编辑”以基本上以不同的方式重新提出这个问题)
我知道有许多不同的软件包可以放入 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 行)是地狱,而且一半时间都不起作用。它包括许多标准组件(例如 ADO)无法识别的“GO”实例。我可以使用批处理文件来执行此操作,但这比我所接受的要脏一些。必须有一种方法可以在不使用批处理文件的情况下执行此类脚本 - 尤其是读取结果并尝试确定更新中是否存在任何错误。
- 此更新程序还将安装另一个第三方安装程序,特别是 SQL Native Client 驱动程序。我想要一些已经准备好启动另一个安装程序并等待它的结果(成功或失败)的东西。如果失败,我需要知道以不同的方式继续更新程序。
我可以理解要理解我的要求是多么困难。我不需要一个可以用于任何事情的解决方案。这是针对这个软件的,仅此而已。我知道可能没有一种单一的解决方案可以涵盖上述所有内容,但任何帮助都会很棒。
【问题讨论】:
-
您要求在一个组件中提供很多功能(并通过“手动安装大部分”来自己做很多工作)。我发布了一个不是组件的答案;如果它对您不起作用,请投反对票。 :)
-
您正在寻找的功能不仅仅是一个“简单的组件”。更新、在 Windows 中注册、延迟更新正在使用的文件等。InnoSetup(如我的回答中所述)生成单个可执行文件(没有外部 DLL,单个文件分发,处理您的所有要求等等,并附带完整的 Delphi 源代码,并由数十万 Delphi 和非 Delphi 开发环境的用户完全调试和测试)似乎是一件轻而易举的事。我不确定你的实际项目(或工作)需要什么,但你显然有很多额外的“重新发明轮子”时间。 :)
-
Jerry,如果您想要一个免费、简单且有效的安装程序,请使用 InnoSetup。它将完成您的所有任务。另一种方法是创建一个 msi 文件,但我不能推荐一个工具。通常,msi 文件比 InnoSetup 复杂得多。
-
这个问题非常广泛和模糊。您一次问了太多问题,而没有提供足够的细节。
-
投票结束,因为这是一个广泛的讨论主题,塞进一篇小论文,而不是一个问题。
标签: delphi installation delphi-7