C++ Internet Explorer BHO检查站点的多实例

C++ Internet Explorer BHO检查站点的多实例,c++,internet-explorer,bho,C++,Internet Explorer,Bho,我正在为一个客户做一个项目。我们正在建立一个内部门户网站,出于各种(主要是政治)原因,我们最终为IE8建立了一个BHO。t所做的一件事是确保一次只能打开门户的一个实例。它通过在门户打开时写入临时文件来实现这一点。不幸的是,这不是最佳的,因为如果IE因任何原因崩溃,那么下次启动门户时,用户会一直盯着一条“未经授权”的消息,直到过时的临时文件被删除。 所以我的问题是:在BHO中是否有任何方法可以查看同一url被加载了多少次?我的意思是,有没有办法直接从IE获取这些信息? 事实上,考虑到我们需要允许弹

我正在为一个客户做一个项目。我们正在建立一个内部门户网站,出于各种(主要是政治)原因,我们最终为IE8建立了一个BHO。t所做的一件事是确保一次只能打开门户的一个实例。它通过在门户打开时写入临时文件来实现这一点。不幸的是,这不是最佳的,因为如果IE因任何原因崩溃,那么下次启动门户时,用户会一直盯着一条“未经授权”的消息,直到过时的临时文件被删除。 所以我的问题是:在BHO中是否有任何方法可以查看同一url被加载了多少次?我的意思是,有没有办法直接从IE获取这些信息? 事实上,考虑到我们需要允许弹出窗口等,这比这要复杂一点,但这将是一个好的开始


谢谢您的时间。

如果您想在当前用户会话中限制浏览器实例,可以使用互斥锁而不是文件。尝试在BHO启动时(在SetSite调用中)以合理的超时获取互斥,并在最后的SetSite调用中再次释放

如果结果是WAIT_OBJECT_0或WAIT_放弃,则没有其他BHO实例持有互斥体,而WAIT_放弃发生在另一个线程在持有互斥体时崩溃时。如果结果是WAIT_TIMEOUT,则互斥锁已被另一个BHO实例占用,您不应让用户根据您的要求使用您的网站


但如果我是一个坚定的用户,我可以启动XP模式并从那里访问网站

Internet Explorer启动时,您的BHO不能删除该文件吗?可能用户在启动时没有打开任何站点,即使在加载门户时,也应该再次创建文件。(我不熟悉BHO,也不知道他们是从浏览器开始,还是只在访问网站时才开始。)这就是我们最终所做的。每次运行IE的新实例时,都会根据属于IE的当前进程id检查所有驻留的临时文件。如果临时文件(其名称包含进程id)存在,但相应的进程id不存在,则会将其删除。我们不想限制borwser实例,只需访问内部门户。最后,我们重新定义了临时文件解决方案。在某些情况下,允许使用多实例(由委员会设计-hell on wheels!),因此我们使用该文件来告诉用户哪些URL是授权的。好答案!