NSIS脚本,而不杀死探险
问题描述:
帮助安装未安装和安装一个可执行文件foo.exe的,即时通讯歌厅下面的错误NSIS脚本,而不杀死探险
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的
答
对于已注册的外壳扩展实在是没有干净的方式来删除DLL的除了强制重启(或加注销如果他们在HKCU \ Software \ Classes下注册)
如果这还不够好,你基本上有两种选择:
- 重命名的.dll文件,之后再删除它
-
<HACKALERT>
进样调用CoFreeUnusedLibraries()到每一个有你的DLL进程中的线程加载</HACKALERT>
就杀死并重新启动资源管理器是不是一个真正的选择,因为你不知道,如果其他一些程序也使用您的外壳扩展。
+0
安德斯,试图重命名的残留物存在一个卸载,但无法成功的。你能否给我提供任何示例代码片段.. – Anees 2010-11-20 10:58:27
你是如何执行卸载程序的? – kichik 2010-11-14 13:40:50
我有卸载程序。我用UAC插件执行所有的权限..它不是我的UAC的问题(使用XP) – Anees 2010-11-14 13:48:38
我其实并没有想到UAC,而是你的执行方法不是等待卸载程序正确完成,而只是继续安装程序,当它真的完成。这是NSIS卸载程序非常常见的问题。 – kichik 2010-11-14 13:55:08