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的

+0

你是如何执行卸载程序的? – kichik 2010-11-14 13:40:50

+0

我有卸载程序。我用UAC插件执行所有的权限..它不是我的UAC的问题(使用XP) – Anees 2010-11-14 13:48:38

+0

我其实并没有想到UAC,而是你的执行方法不是等待卸载程序正确完成,而只是继续安装程序,当它真的完成。这是NSIS卸载程序非常常见的问题。 – kichik 2010-11-14 13:55:08

对于已注册的外壳扩展实在是没有干净的方式来删除DLL的除了强制重启(或加注销如果他们在HKCU \ Software \ Classes下注册)

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

  • 重命名的.dll文件,之后再删除它
  • <HACKALERT>进样调用CoFreeUnusedLibraries()到每一个有你的DLL进程中的线程加载</HACKALERT>

就杀死并重新启动资源管理器是不是一个真正的选择,因为你不知道,如果其他一些程序也使用您的外壳扩展。

+0

安德斯,试图重命名的残留物存在一个卸载,但无法成功的。你能否给我提供任何示例代码片段.. – Anees 2010-11-20 10:58:27