当我尝试卸载并安装可执行文件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
答案 0 :(得分:1)
对于已注册的外壳扩展,除了强制重新启动之外,实际上没有干净的方法来删除dll(如果它们在HKCU \ Software \ Classes中注册,则无法注销)
如果这还不够好,你基本上有两个选择:
<HACKALERT>
将一个调用CoFreeUnusedLibraries()的线程注入到已加载dll的每个进程中</HACKALERT>
只是杀死并重新启动资源管理器并不是一个真正的选择,因为你不知道其他一些程序是否也在使用你的shell扩展。