NSIS脚本帮助安装而不杀死资源管理器

时间:2010-11-14 13:38:00

标签: nsis

当我尝试卸载并安装可执行文件foo.exe时,请注意以下错误

Error opening file for writing
click abort to stop the installation

我可以发现在卸载时有些文件无法删除。 通过使用进程资源管理器,我可以看到explorer.exe即使取消注册后仍然引用了foo.exe的一些dll。

并杀死explorer.exe并在卸载时再次重新启动它解决了问题。 (通过NSIS安装脚本)。

或在脚本中设置rebook ok标志,并要求用户在重新安装foo.exe之前重新启动他的机器。

我不认为这是一个很好的解决方案,要求用户在卸载后重启机器。

任何人都可以帮助我如何确保我的安装正常而不是重新启动explorer.exe

1 个答案:

答案 0 :(得分:1)

对于已注册的外壳扩展,除了强制重新启动之外,实际上没有干净的方法来删除dll(如果它们在HKCU \ Software \ Classes中注册,则无法注销)

如果这还不够好,你基本上有两个选择:

  • 重命名.dll并稍后将其删除
  • <HACKALERT>将一个调用CoFreeUnusedLibraries()的线程注入到已加载dll的每个进程中</HACKALERT>

只是杀死并重新启动资源管理器并不是一个真正的选择,因为你不知道其他一些程序是否也在使用你的shell扩展。