关于在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]条目在卸载过程中只执行一次。参见";CCD_ 6";有关详细信息,请参阅帮助文件中的主题。

我已经查找了RunOnceId的帮助,其中指出:

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

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

您应该按照警告的建议使用该参数。

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

请注意,您无法回顾性地修复此问题。以前的安装程序排队的卸载命令仍将在过去的每次安装中执行。但是,如果这是一个大问题,你可能已经注意到了。

最新更新