delphi - 当防火墙拒绝互联网访问时,ShellExecute 会阻止(永不返回)

标签 delphi shellexecute

我一直在使用 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/

相关文章:

powershell - 从其他软件调用 Powershell 脚本

linux - Shell 脚本在 Linux 中执行时显示错误

vb6 - 如果默认为 Chrome 或 IE,ShellExecute 在打开新浏览器窗口时挂起

delphi - 当 TFormatSetting 设置为 en-US 时,如何解决 '10,000.00' 不是有效的浮点值

delphi - 如何正确将 Timage 位图分配给 jpg?

c++ - 英特尔MKL函数在内部调用TerminateProcess()

powershell - 如何保持窗口打开:ShellExecuteW(0,0 ,“powershell.exe”, “..” ,“..”,SW_SHOW)?

json - Delphi 创建 JSON

delphi - Winsock 使用不同版本

c++ - 使用 ShellExecute() 与手动打开命令提示符有什么区别?