【问题标题】:Inno setup executes [UninstallRun] during installation followupInno setup 在安装过程中执行 [Uninstall Run] 跟进
【发布时间】:2015-01-10 08:14:03
【问题描述】:

这个问题:

Inno setup executes [UninstallRun] during installation

例如代码:

[UninstallRun]
Filename: "{sys}\OfflineSvc.exe"; Parameters: "-uninstall"; WorkingDir: "{sys}"; Flags: skipifdoesntexist 32bit; StatusMsg: "Offline Processing service is being uninstalled. Please wait..."; BeforeInstall: SimpleStopService('Offline_Service', True, False); Flags: waituntilterminated

没有明确的解决方案。它似乎表明了原因,但没有提供明显的解决方案(也许我只是密集)。

为什么 UNINSTALLRUN 项目会在 INSTALLATION 期间运行?

如果这是正常的 - 你怎么能防止它?

INNO 帮助说:

[UninstallRun] 部分也是可选的,它指定了作为卸载的第一步要执行的任意数量的程序。

因此人们会期望 UNINSTALLRUN 部分只会在卸载时执行。

抱歉 - 我是在 SO 上发帖的新手,它不会让我对上述问题发表评论,所以除了发布新问题外,我看不到任何其他方式来获取更多信息。如果对新手有更好的方法,请告诉我我应该怎么做。

【问题讨论】:

  • edit 您的问题并包含一个演示此行为的脚本。如果您无法提供复制问题的方法,则无法确定是否存在实际问题(或提供解决方案)。有关如何执行此操作的建议,请参阅 How to create a Minimal, Complete, and Verifiable example
  • 对不起。我要求一个脚本,而不是一个[UninstallRun] 条目。包括一个示例脚本,我们可以使用它来创建一个可以重现问题的示例设置。我本可以从另一篇文章中复制你的样本,但它本身并不能重现问题。请参阅我之前提供的最小的、完整且可验证的示例链接。
  • 我的 INNO 脚本有 550 行长 - 有没有办法附加文件。
  • 我们的 cmets 似乎重叠了。 :-) Inno Setup 示例文件夹有几个脚本示例,可以在不实际安装文件的情况下作为示例构建(并执行设置)。选择一个,对其进行更改以证明问题,然后在此处发布。
  • 好的 - 可能要到星期一才能完成。

标签: inno-setup


【解决方案1】:

[UninstallRun] 部分在安装过程中实际上并不运行,而是写入在安装过程中创建的卸载程序日志中。您只需在安装脚本中指定 [UninstallRun] 部分,以便您可以告诉卸载程序除了删除已安装的任何内容之外还可以做什么,例如您可以使用它来停止和删除您在安装期间使用 [运行] 部分中的 sc.exe 安装的服务。

在引用的示例中,它正在评估 {code} 函数以确定要添加到卸载程序日志的硬编码文件名,因为我相信卸载程序无法在卸载时评估代码查询,只有硬编码文件名和存储在卸载日志中的路径。

【讨论】:

  • 如果这是真的 - 我不会问这个问题。它确实在安装期间运行。
  • 请查看我刚刚添加的其他信息。在引用的示例中,{code} 函数在安装期间对其进行评估以将文件名添加到卸载日志中,但在安装期间它实际上并未运行。
  • 我刚刚注意到另一个示例中的“代码”。我添加了我没有的项目。
  • 您正在使用 BeforeInstall: SimpleStopService(Offline_Service) 调用 [Code] 函数。假设您只是想在卸载之前停止服务,看起来就是这种情况,您可以简单地使用Filename: "{sys}\sc.exe" 上面的另一行,然后在Parameter 添加"stop Offline_Service" 以消除需要使用BeforeInstall 代码功能。您也可以使用Filename: "{sys}\sc.exe"; Parameters: "delete Offline_Service" 将其删除。
  • @Toby,你的脚本没问题(如果用户在卸载应用程序之前不会移动他们的 Windows 系统目录路径。因为 {sys} 常量在安装时被评估为实际路径) .该条目本身在卸载时执行,只是它的每个参数值都必须在安装时确定(评估),正如罗伯特正确回答的那样。话虽如此,您知道问题出在哪里,{code} 函数用于在安装时执行的 Filename 参数。
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 2018-04-11
  • 1970-01-01
  • 2011-01-29
  • 2010-11-06
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多