当防火墙拒绝访问Internet时,ShellExecute阻止(永不返回)

时间:2011-05-01 21:01:55

标签: delphi shellexecute

我一直在使用ShellExecute在浏览器中打开网址,从模式窗口代码调用,如下所示:

procedure TfmAbout1.BtnHomePageClick(Sender: TObject);
begin
   inherited;
   if ConnectedToWeb then
    ShellExecute(Handle, 'open', URL_PRODUCT_HOMEPAGE, nil, nil, SW_SHOWNORMAL);
end;

但是在具有区域警报防火墙的计算机上,用户可能会弹出一个提示,允许或拒绝我的应用程序访问Internet。当用户点击“拒绝”时,ShellExecute永远不会返回...我的应用程序将被挂起&该过程必须在外部关闭(即从任务管理器)。

我能做些什么来预测或预防这种情况?我需要像ShellExecute这样的东西,在这种情况下是非阻塞的。

我很感激任何想法。

2 个答案:

答案 0 :(得分:3)

所以你想解决区域警报中的错误吗?

我可能会检查Zone Alarm版本,根据它,有一个小的'bootstrap'程序代表我执行ShellExecute。这只会挂起小型引导程序。

你可以杀死那个引导程序(因为你的父进程是所有者),如果它在超时后没有返回(15或30秒就可以)。

你甚至可以警告用户有一个错误版本的Zone Alarm:)

编辑:注意:我认为杀死一个进程比杀死一个帖子更安全。

答案 1 :(得分:0)

好吧,在一个线程中运行ShellExecute。在某些时候,你可以看到它是否完成。如果没有,你可以终止它。