问题描述
这是我的[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”,则仅执行最新的RunOnceId
设置为“ DelService”的条目;否则,将执行最新的条目。其余的将被忽略。请注意,RunOnceId
比较是区分大小写的。如果您没有为RunOnceId
分配字符串,编译器会警告您,可以使用MissingRunOnceIdsWarning
禁用它。
我可以关闭警告。但是我想知道我是否真的需要在设置中使用此参数,因为到目前为止我还没有使用过此参数。
解决方法
您应该使用该参数,如警告所示。
如果不这样做,则每次升级(除非安装程序卸载了先前版本)都将对[UninstallRun]
命令的新执行进行排队。因此,如果您先安装9次然后升级,那么在卸载时,所有卸载命令将执行10次。当然,就您而言,这仅意味着您的每个regasm /u
命令都会失败9次。没什么大不了的,但是如果用户检查卸载程序日志(以防万一他们有问题),他们将看到很多故障,这可能会误导他们。
请注意,您无法追溯解决此问题。以前的安装程序排队的卸载命令仍将对每个过去的安装执行。但是,如果这是一个主要问题,您可能已经注意到了。