【问题标题】:InnoSetup: Pascal script for cancelling setup when file/folder existsInnoSetup:用于在文件/文件夹存在时取消设置的 Pascal 脚本
【发布时间】:2012-10-06 06:26:03
【问题描述】:

在我的 InnoSetup 中,我在 InstallRun 部分使用了几个文件操作。如果这些都正确执行而没有问题,那么应该删除某个临时文件夹。

如果出现问题,则临时文件夹仍然存在。在这种情况下,我希望通过显示我选择的错误消息的消息框来取消设置。

由于我(还)没有使用 Pascal 脚本的经验,因此请您为我提供一个示例脚本。

提前致谢!

补充: 我现在将解释我需要这个的原因。该方案正在更新现有版本,即 Windows 服务应用程序。在更新这些文件之前,我必须先卸载服务。为此,我使用安装包中的我自己的命令行。其他新文件将临时解压缩到临时文件夹(app 文件夹的子文件夹)。卸载 Windows 服务后,新文件将从 temp 文件夹移动到 app 文件夹。如果这里出现问题,我想取消设置并向用户显示错误消息。通过检查临时文件夹是否仍然存在,我可以最好地判断是否出现问题。

【问题讨论】:

  • 什么是InstallRun 部分?
  • 你做什么样的事情?它依赖于刚刚安装的应用程序还是先决条件?一个更简单(也更好)的选项是在 PrepareToInstall() 事件函数中提取和运行文件。如果你能回答我的观点,我可以做一个完整的回答。
  • @Deanna:我已经更新了我的问题,说明我为什么需要这个。如果您需要更多信息,请告诉我。

标签: installation inno-setup


【解决方案1】:

假设您指的是[Run] 部分,则无法在该过程后期取消安装。

相反,您应该考虑使用PrepareToInstall。在此,您需要做的就是停止和取消注册旧服务,可以直接通过 API 或根据您的选择在旧服务 EXE 上调用命令。 (对于新安装,不要忘记处理该服务尚不存在的情况。)

在此之后[Files] 将照常替换文件,然后您可以[Run] 或使用代码(通过AfterInstall 或CurStepChanged(ssPostInstall),取决于您希望它发生的时间)重新注册并开始服务。

无需使用临时文件夹——这很好,因为这也会导致卸载问题。

【讨论】:

  • 卸载当前正在运行的 Windows 服务的过程涉及的不仅仅是标准的卸载,因此我需要使用安装包中的自定义构建命令行 EXE。
  • 正如我所说,我通常将这种功能编译到服务可执行文件本身中。然后我可以使用“-stop -uninstall”之类的参数运行它(从 PrepareToInstall,如前所述)来停止并删除自身。如果您愿意,也可以call the APIs directly。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多