微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用外壳扩展程序无法进行Inno Setup干净卸载

如何解决使用外壳扩展程序无法进行Inno Setup干净卸载

我正在使用Inno Setup 6.0.5,并且注册了两个Shell扩展DLL,它们与ownCloud中的DLL类似。一个DLL注册一个动态上下文菜单,另一个DLL添加叠加图标。

我正在使用Inno Setup提供的设施来执行此步骤。这意味着:

[Setup]
ChangesAssociations=true
ChangesEnvironment=true

[Files]
...
Source: "shell-integration\*"; DestDir: "{app}\shell-integration"; Flags: regserver 64bit; Check: IsAdminInstallMode;

我观察到以下内容

  • 设置完成后,覆盖图标不处于活动状态。他们只是一次我手动重新启动explorer.exe。像this这样的消息来源声称可以通过调用SHChangeNotifySendMessageTimeoutW来实现,但显然是错误的,因为我正是这样做的(请参见ChangesAssociations和{ {1}}应该这样做)。
  • 卸载后,不会删除app目录,因为2个DLL文件仍处于锁定状态。这也禁止更新我的应用程序。 Inno Setup应该能够检测到锁定的文件并提供关闭锁定文件的应用程序的功能,但是该机制似乎不起作用...此外,ChangesEnvironment标志没有用,因为这会导致Inno Setup删除文件仅在重新启动后才能使用,但我不想强迫用户升级应用程序的情况下重新启动计算机。

我该怎么办?我看到的唯一解决方案是自己做所有事情,而不依赖uninsrestartdelete[Files]标志。特别是,卸载要求首先注销DLL,然后强制重新启动explorer.exe,然后实际上删除文件文件夹。我会在regserver块的CurUninstallStepChanged中执行此操作。并重新启动explorer.exe,我将在if CurUninstallStep = usUninstall块中修改CurStepChanged

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。