首页 > 解决方案 > 关于在 Inno Setup 脚本的 [UninstallRun] 部分中使用 RunOnceId 的说明

问题描述

这是我的[UninstallRun]部分:

[UninstallRun]
Filename: {dotnet40}\regasm.exe; Parameters: /u MSAToolsLibrary_x86.dll; WorkingDir: {app}; Flags: runhidden;
Filename: {dotnet4064}\regasm.exe; Parameters: /u MSAToolsLibrary_x64.dll; WorkingDir: {app}; Flags: runhidden; Check: IsWin64;
Filename: {dotnet40}\regasm.exe; Parameters: /u MSAToolsGMailLibrary_86.dll; WorkingDir: {app}\MSAToolsGMailLibrary; Flags: runhidden
Filename: {dotnet4064}\regasm.exe; Parameters: /u MSAToolsGMailLibrary_64.dll; WorkingDir: {app}\MSAToolsGMailLibrary; Flags: runhidden; Check: IsWin64;

当我使用 Inno Setup 6.1.1 编译时,我收到以下警告:

警告:有没有参数的[UninstallRun]部分条目。RunOnceId通过将字符串分配给RunOnceId,您可以确保特定[UninstallRun]条目在卸载期间仅执行一次。有关详细信息,请参阅[UninstallRun]帮助文件中的“”主题。

我已经查找了RunOnceId它的帮助:

仅在一个[UninstallRun]部分有效。如果多次安装相同的应用程序,“运行”条目将在卸载日志文件中重复。通过将字符串分配给RunOnceId,您可以确保特定[UninstallRun]条目在卸载期间仅执行一次。例如,如果卸载日志中有两个或多个“运行”条目RunOnceId设置为“DelService”,则只会执行设置为“DelService”的最新条目RunOnceId;其余的将被忽略。请注意,RunOnceId比较区分大小写。如果您没有为 分配字符串RunOnceId,编译器会对此发出警告,可以使用MissingRunOnceIdsWarning.

我可以看到我可以关闭警告。但是我想知道我是否真的需要在我的设置中使用这个参数,因为直到现在我还没有这样做过。

标签: inno-setupuninstallation

解决方案


正如警告所示,您应该使用该参数。

如果您不这样做,对于每次升级(除非您的安装程序卸载以前的版本),您的[UninstallRun]命令的新执行将排队。因此,如果您安装然后升级 9 次,那么在卸载时,您所有的卸载命令将被执行 10 次。当然,就您而言,这仅意味着您的每个regasm /u命令都会失败 9 次。没什么大不了的,但是如果用户检查卸载程序日志(以防万一他们有问题),他们会看到很多失败,这可能会误导他们。

请注意,您无法追溯修复此问题。以前的安装程序排队的卸载命令仍将针对每个过去的安装执行。但同样,如果这是一个大问题,你可能已经注意到了。


推荐阅读