2012-07-20 129 views
4

我有一个程序产品,它额外安装外壳扩展到Windows资源管理器。它使用C#制作并使用.NET Framework v4.0。外壳扩展是通过使用regasm.exe在安装过程中由Inno Setup安装的。一切正常,直到我想安装应用程序的更新版本。问题是我无法更新外壳扩展DLL,因为它加载到资源管理器的内存。在安装Inno Setup的显示我下面的消息更新与Inno安装程序的Windows资源管理器外壳扩展

enter image description here

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

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

Inno Setup的文件在用(IssProc.dll)加载项没有帮助,因为尽快通过此加载项终止Windows资源管理器,资源管理器立即重新启动。

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

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

+0

随着*也许有人可以给我一个提示,其中检查使用中的文件的代码放在*你的意思是在InnoSetup源代码?或者您打算展示如何使用该解决方案的示例脚本? – TLama 2012-07-21 00:14:58

+0

我的意思是Inno Setup源代码。我无法找到类似于上面指定的文件验证的任何内容。我们只在Inno Setup中检查.NET v4。可能这是由Inno Setup引擎进行的检查? – 2012-07-21 08:55:28

+0

我看到由安装向导进行的检查 – 2012-07-21 09:09:02

回答

2

在文件条目中使用restartreplace标志。从参考:

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

所以使用此标志不会导致向导询问使用文件终止应用程序,但安排文件更新到下次重新启动,并提示用户在安装结束时重新启动计算机,什么是我的意见相当用户友好和常用。

+1

Thx。像瑞士钟表一样工作。 – 2012-07-21 09:40:48

+0

IIRC,它仍然会提供RestartManager提示,但如果它仍在使用中,则继续进行替换以重新启动。你需要为此调整过滤器。 – Deanna 2012-07-22 18:33:44

0

要禁用提示,您应该简单地在[Setup]中设置“CloseApplications = no”。 但是如果您确定需要更换,但仍然需要使用[File]中的restartplace标志。

+0

这将有效地执行与'restartreplace'相同的操作。 – TLama 2014-12-15 09:08:31

+0

我希望他们是,所以我可以通过这种方式直接解决同一问题,但运气不好,他们不是我的考验。我不得不花更多的时间做更多的尝试。 :(我是通过最新的Inno setup 5.5.5(a)完成的。 – Bingley 2014-12-16 08:17:24

相关问题