我一直在使用 ShellExecute
在浏览器中打开 URL,从模态窗口代码调用,如下所示:
procedure TfmAbout1.BtnHomePageClick(Sender: TObject);
begin
inherited;
if ConnectedToWeb then
ShellExecute(Handle, 'open', URL_PRODUCT_HOMEPAGE, nil, nil, SW_SHOWNORMAL);
end;
但在具有区域警报防火墙的计算机上,用户可能会收到弹出提示,以允许或拒绝我的应用程序访问 Internet。当用户单击“拒绝”时,ShellExecute
永远不会返回...然后我的应用程序被挂起并且必须从外部关闭该进程(即从任务管理器)。
我可以做什么来预测或防止这种情况发生?我需要像 ShellExecute
这样的东西,在这种情况下是非阻塞的。
如果有任何想法,我将不胜感激。
最佳答案
您想解决区域警报中的错误吗?
我可能会检查区域警报版本,并根据它,让一个小的“引导”程序代表我执行 ShellExecute。那只会挂起小型 Bootstrap 。
如果 Bootstrap 在超时(15 或 30 秒就可以)后没有返回,您可以杀死该 Bootstrap (因为您的父进程是所有者)。
您甚至可以警告用户,Zone Alarm 的版本有问题:)
编辑:注意:我认为终止进程比终止线程更安全。
关于delphi - 当防火墙拒绝互联网访问时,ShellExecute 会阻止(永不返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851385/