使用Inno Setup更新Windows资源管理器外壳扩展

时间:2012-07-20 19:07:36

标签: inno-setup explorer windows-shell shell-extensions

我有一个程序产品,它还在Windows资源管理器中安装了Shell Extension。它是在C#中创建的,并使用.NET Framework v4.0。在安装过程中,使用regasm.exe安装Shell扩展。一切正常,直到我想安装更新版本的应用程序。问题是我无法更新shell扩展DLL,因为它加载到资源管理器的内存中。在安装Inno Setup之前,请向我显示以下消息

enter image description here

它说安装程序需要终止Windows资源管理器,因为它使用应由安装程序更新的文件。 它会终止资源管理器进程,但不会再次启动它。这是我的第一个问题。

其实我不想强制用户关机资源管理器。但我不知道如何从资源管理器的内存中卸载托管的shell DLL。如果通过regasm.exe dll卸载它仍然保留在内存中。事实上,我甚至找不到发生这种检查的地方,因为我收到了已安装的资源。

Inno安装程序的文件使用(IssProc.dll)加载项无效,因为一旦我通过此加载项终止Windows资源管理器,资源管理器会立即重新启动。

我该如何解决这个问题?如何以更好的用户体验更新shell扩展dll? 也许有人可以给我一个提示,检查正在使用的文件的代码放在哪里?

O和BTW我正在使用Windows 7 x64。

2 个答案:

答案 0 :(得分:3)

在文件条目中使用restartreplace标记。来自参考文献:

  

当需要更换现有文件时,它正在使用中(已锁定)   通过另一个运行进程,安装程序将默认显示错误   信息。 此标志告诉安装程序将文件注册为   在下次重新启动系统时替换 (通过调用MoveFileEx   或者在WININIT.INI中创建一个条目。发生这种情况时, 用户   将提示在结束时重新启动计算机   安装过程。

因此,使用此标志不会导致向导要求终止使用该文件的应用程序,而是将文件更新安排到下次重新启动并提示用户在安装结束时重新启动计算机,在我看来,用户非常友好并且常用。

答案 1 :(得分:0)

要禁用提示,只需在[Setup]中设置“CloseApplications = no”即可。 但是,如果您确定需要更换,但稍后需要在[文件]中使用restartplace标志。