NSIS脚本帮助安装而不终止资源管理器

NSIS脚本帮助安装而不终止资源管理器,nsis,Nsis,当我试图取消安装并安装一个可执行文件foo.exe时,我发现以下错误 Error opening file for writing click abort to stop the installation 我发现在取消安装时未能删除某些文件。 通过使用process explorer,我可以看到explorer.exe即使在注销了foo.exe的一些DLL之后,仍然引用了它们 在取消安装时,杀死explorer.exe并重新启动它可以解决问题。(通过NSIS安装脚本) 或者在脚本中设置rebo

当我试图取消安装并安装一个可执行文件foo.exe时,我发现以下错误

Error opening file for writing
click abort to stop the installation
我发现在取消安装时未能删除某些文件。 通过使用process explorer,我可以看到
explorer.exe
即使在注销了foo.exe的一些DLL之后,仍然引用了它们

在取消安装时,杀死explorer.exe并重新启动它可以解决问题。(通过NSIS安装脚本)

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

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


有谁能帮我确定我的安装是否正常,而不是重新启动explorer.exe

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

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

  • 重命名.dll,稍后将其删除
  • 注入一个线程,该线程调用加载了dll的每个进程

由于您不知道是否有其他程序也在使用您的外壳扩展,因此仅终止并重新启动explorer并不是一个真正的选项。

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

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

  • 重命名.dll,稍后将其删除
  • 注入一个线程,该线程调用加载了dll的每个进程

由于您不知道是否有其他程序也在使用您的shell扩展,因此仅终止并重新启动explorer并不是一个真正的选项。

您如何执行卸载程序?我有un安装程序。我使用UAC pluggin的所有权限执行。。这不是我的UAC的问题。(使用XP)我实际上没有想到UAC,而是你的执行方法没有等待卸载程序正确完成,只有在真正完成后才继续安装。这是NSIS卸载程序的一个非常常见的问题。嗨,kichik,我正在阅读您的论坛评论之一..关于将DLL移动到temp并重命名..没关系..我使用RMDir/r/REBOOTOK“$INSTDIR”作为卸载脚本的最后一行。这是在对已注册DLL调用exec wait之后..deleteregkey everything..仍然不是我的意思…:)您如何执行卸载程序?我有un安装程序。我使用UAC pluggin的所有权限执行。。这不是我的UAC的问题。(使用XP)我实际上没有想到UAC,而是你的执行方法没有等待卸载程序正确完成,只有在真正完成后才继续安装。这是NSIS卸载程序的一个非常常见的问题。嗨,kichik,我正在阅读您的论坛评论之一..关于将DLL移动到temp并重命名..没关系..我使用RMDir/r/REBOOTOK“$INSTDIR”作为卸载脚本的最后一行。这是在对已注册DLL调用exec wait之后..deleteregkey everything..仍然不是我的意思…:)Anders尝试对un安装后存在的残留物进行重命名,但未能成功。你能给我提供任何示例代码片段吗..Anders,尝试重命名un安装后存在的残留物,但未能成功。你能给我提供一些示例代码片段吗。。