inno-setup - 使用 shell 扩展无法进行 Inno Setup 彻底卸载
问题描述
我正在使用 Inno Setup 6.0.5 并注册了两个 shell 扩展 DLL,它们与ownCloud中的相似。一个 DLL 注册一个动态上下文菜单,另一个 DLL 添加覆盖图标。
我正在使用 Inno Setup 提供的工具来执行此步骤。这意味着:
[Setup]
ChangesAssociations=true
ChangesEnvironment=true
[Files]
...
Source: "shell-integration\*"; DestDir: "{app}\shell-integration"; Flags: regserver 64bit; Check: IsAdminInstallMode;
我观察到的情况如下:
- 设置完成后,覆盖图标不活动。它们只有在我手动强制重启 explorer.exe 时才会出现。有这样的消息来源声称可以通过调用
SHChangeNotify
and来实现SendMessageTimeoutW
,但它们显然是错误的,因为我正在这样做(请参阅ChangesAssociations
andChangesEnvironment
应该这样做)。 - 卸载后app目录并没有被删除,因为这2个dll文件仍然被锁定。这也禁止更新我的应用程序。Inno Setup 应该检测锁定的文件并提供关闭锁定它们的应用程序,但该机制似乎不起作用......此外,
uninsrestartdelete
标志没有用,因为这会导致 Inno Setup 仅在重启,但我不想强迫用户重启机器,以防他们升级应用程序。
我应该做些什么?我看到的唯一解决方案是自己做所有事情,而不是依赖[Files]
和regserver
标记。特别是卸载需要先注销DLL,然后强制重启explorer.exe,然后才真正删除文件和文件夹。我会CurUninstallStepChanged
在if CurUninstallStep = usUninstall
街区里这样做。并重新启动 explorer.exe 我将CurStepChanged
在if (CurStep = ssDone)
块中进行修改。
解决方案
推荐阅读
- full-text-search - Sphinx 不在日文文档中搜索带下划线的英文单词
- android - 如何配置 azure waf?
- continuous-integration - 如何在 buildkite 上运行脚本后期构建
- c# - 以编程方式添加行后未提交的新行不可见datagridview c#
- javascript - 使用 useReducer 刷新后保持页面的当前状态?- 反应
- python - 如何在 Kivymd 列表中激活列表
- python - 如何使用 cv2 去除数字周围的噪音
- kubernetes - 删除期间的 Helm 钩子
- tensorflow - 具有多个前向通道的渐变胶带
- android - 我正在使用带有 expo 的 react native 构建一个应用程序,其中我需要 android 上的图片库的权限