使用外壳扩展程序无法进行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 (将#修改为@)