我有一个程序产品,它另外将外壳扩展安装到 Windows 资源管理器。它用 C# 制作并使用 .NET Framework v4.0。Shell 扩展是由 Inno Setup 在安装期间使用 regasm.exe 安装的。一切正常,直到我想安装更新版本的应用程序。问题是我无法更新 shell 扩展 dll,因为它已加载到资源管理器的内存中。在安装 Inno Setup 之前向我显示以下消息
它说安装程序需要终止 Windows 资源管理器,因为它使用应由安装程序更新的文件。 它终止了资源管理器进程,但不会再次启动他。这是我的第一个问题。
其实我不想强迫用户关闭资源管理器。但我不知道如何从资源管理器的内存中卸载托管 shell dll。如果通过 regasm.exe 卸载它,dll 仍然保留在内存中。事实上,我什至找不到发生这种检查的地方,因为我收到了已经制作的安装源。
用于 Inno Setup 的 Files-In-Use (IssProc.dll) 加载项没有帮助,因为一旦我通过此加载项终止 Windows 资源管理器,资源管理器就会立即重新启动。
我该如何解决这个问题?如何以更好的用户体验更新 shell 扩展 dll?也许有人可以给我一个提示,检查正在使用的文件的代码在哪里?
O 和 BTW 我使用的是 Windows 7 x64。