inno-setup - 关于在 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
.
我可以看到我可以关闭警告。但是我想知道我是否真的需要在我的设置中使用这个参数,因为直到现在我还没有这样做过。
解决方案
正如警告所示,您应该使用该参数。
如果您不这样做,对于每次升级(除非您的安装程序卸载以前的版本),您的[UninstallRun]
命令的新执行将排队。因此,如果您安装然后升级 9 次,那么在卸载时,您所有的卸载命令将被执行 10 次。当然,就您而言,这仅意味着您的每个regasm /u
命令都会失败 9 次。没什么大不了的,但是如果用户检查卸载程序日志(以防万一他们有问题),他们会看到很多失败,这可能会误导他们。
请注意,您无法追溯修复此问题。以前的安装程序排队的卸载命令仍将针对每个过去的安装执行。但同样,如果这是一个大问题,你可能已经注意到了。
推荐阅读
- android - Android BindingAdapter 将可变数量的参数(vararg)作为参数
- python - 如何在 Azure Python 3 Runbook 中获得 SQL 令牌身份验证?
- sql - 查询期间字段中的多行
- laravel - 使用 Laravel 项目的 Fudion 图表
- firebase-realtime-database - 我应该使用什么类型的列表来 .add() 那里的 shapshot.children 对象?
- python - 狮身人面像:“警告:重复对象描述”的原因是什么?
- javascript - 如何从带有 JS 的表格的单个单元格中创建可点击的表格数据?
- firebase - Flutter Firestore:在同一查询中使用 whereNotIn 和 arrayContains 解析查询参数时出错
- javascript - 使用数组对象调用 onClickHandler 中的 useQuery
- javascript - 如何在 Vue 中使用 axios 检索 JSON Web 令牌?