我一直在使用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
这样的东西,在这种情况下是非阻塞的。
我很感激任何想法。
答案 0 :(得分:3)
所以你想解决区域警报中的错误吗?
我可能会检查Zone Alarm版本,根据它,有一个小的'bootstrap'程序代表我执行ShellExecute。这只会挂起小型引导程序。
你可以杀死那个引导程序(因为你的父进程是所有者),如果它在超时后没有返回(15或30秒就可以)。
你甚至可以警告用户有一个错误版本的Zone Alarm:)
编辑:注意:我认为杀死一个进程比杀死一个帖子更安全。
答案 1 :(得分:0)
好吧,在一个线程中运行ShellExecute。在某些时候,你可以看到它是否完成。如果没有,你可以终止它。