を拒否したとき、私はこのように、モーダルウィンドウコードから呼び出され、ブラウザでURLを開き、ShellExecute
を使用してきた:のShellExecuteブロック(返すことはありません)ファイアウォールがインターネット
procedure TfmAbout1.BtnHomePageClick(Sender: TObject);
begin
inherited;
if ConnectedToWeb then
ShellExecute(Handle, 'open', URL_PRODUCT_HOMEPAGE, nil, nil, SW_SHOWNORMAL);
end;
しかし持つマシン上でZone Alarmファイアウォールを使用すると、ユーザーはインターネットへのアプリケーションアクセスを許可または拒否するポップアッププロンプトを表示することがあります。ユーザーが「拒否」をクリックすると、ShellExecute
は返されません。私のアプリケーションは次に掛けられます&プロセスは外部(つまり、タスクマネージャーから)シャットダウンする必要があります。
これを予測または防止するには、どうすればよいですか?このような状況では、非ブロックであるShellExecute
のようなものが必要です。
私は何か考えていただければ幸いです。
私はそれが本当に問題がある 'ConnectedToWeb'だと思っています。 ShellExecuteはネットワークアクセスを要求すべきではありません。レジストリの "http"プレフィックスに関連付けられているものを実行します。ゾーンアラームは、インターネットにアクセスできるかどうかを判断するためにインターネットにアクセスしようとしているため、あなたのプログラムにフラグを立てます。あなたのプログラムが実際にインターネットにアクセスする必要がない場合は、Zone Alarmが*ブラウザ*にアクセスできるようにしてもプログラムが拒否される可能性があり、関数が間違った結果を返すため。 **無条件にShellExecuteを呼び出す。** –
@Rob - 私はすでにそれを考えていた。 ConnectedToWebは問題ではありません。それをコメントアウトすると、ShellExecuteの呼び出しはブロックされます。ちなみにZone Alarmでは、[My appname]実行可能ファイルが "http://www.goflagship.com"にアクセスしようとしています。私は現時点で他の火災を出していますが、解決策が見つかったら返信します(ほとんどの場合、ShellExecuteを別のスレッドや殺される別のプロセス経由で呼び出す)。別の考え方:私は、より優雅な解決策として、タイムアウトを使ってWebサイトにpingできるかどうかを調べるつもりです。 –
(以前のコメントでリンクが正しく入力されなかったため、ZoneAlarmはhttp:// –