我想覆盖Internet Explorer下载管理器功能。我已经设法在c#和注册的COM中实现IDownloadManager接口,这样我就可以捕获下载事件并执行自定义操作。 我也有现有的下载管理器应用程序。
我担心的是IDownloadManager实现是否应该是我的应用程序的一部分,或者更确切地说是仅与我的下载管理器通信的单独项目。我会考虑一种应用方法,但我不知道应该如何实施。
我看到的主要问题是我只想运行一个下载管理器实例,所以从COM代码我应该:
1)检查实例是否已在运行(使用winapi中的GetWindow?),如果没有则启动它。
2)将下载URL传递给实例。
这应该有效,但我对winapi没有经验,我怀疑可能有更好的方法来做到这一点。 任何提示? Thansk, 马特
答案 0 :(得分:0)
您应该使用out-of-process COM server helpers。然后,COM基础架构将负责正确的进程管理,包括服务锁定和正确的关闭顺序(无法通过COM帮助无法自行解决这些问题)。
答案 1 :(得分:0)
简单地将下载URL传递给不同的应用程序通常会起作用,但是有很多情况不适用于简单的架构。特别是,需要特定cookie或身份验证信息的站点通常会在没有此信息的情况下失败,并且在另一个应用程序中重新启动下载可能会导致服务器拒绝连接(某些站点拒绝允许多个连接)。
一般来说,您应该避免使用.NET来构建Internet Explorer扩展,因为这样做会产生性能和可靠性问题。 (如果你必须使用.NET,你应该尝试使用.NET4,它不会受到早期版本的CLR所带来的并排版本问题的困扰。)