質問: ネット接続と「単一インスタンスのアプリケーションを作成する」設定につい ネット接続と「単一インスタンスのアプリケーションを作成する」設定について (vb2008eeです) プロジェクトの設定(「アプリケーション」の項)で、 「単一インスタンスのアプリケーションを作成する」にチェックを入れたら、 実行(デバッグ実行ではなく、ビルドして作成されたexe実行)時に、 ウイルスバスター2010が、以下のように、 「プログラムがインターネットからデータを通信するのをブロックしました。」 とのメッセージを表示するようになりました。 プログラム自体は、通信などは全く行わないものであり、 また、上記プロジェクト設定をしなければ、メッセージが出ません。 これはどのように理解したらよいのでしょうか。 何か他に設定が必要なのでしょうか。 それともウイルスバスターがアホなのでしょうか。 それとも上記プロジェクト設定をする限りやむを得ないものなのでしょうか。 お分かりの方がいらっしゃったら教えてください。 なお、ウイルスバスターの添付メッセージ画面で、通信を許可しても 拒否しても、問題なく単一動作してます。
回答: こんばんは。 推測でしかないですが。 「単一インスタンスのアプリケーションを作成する」のチェックを入れると、vb2008によって、あらかじめ用意されている、多重起動をチェックするためプログラムが組み込まれることになると思うのですが、そのコード内において、ソケット通信を行うようなコードが実行されてしまっているのかもしれません。 windowsにおいて、多重起動のチェックは、自分と同じ名前のプロセスを探すとか、自分と同じクラスidのウィンドウを探すとか、プロセス間通信のたぐいのことをします。.net frameworkでは、プロセス間通信のたぐいのことは、.netリモーティング という機構として、まとめられており、その機構のなかには、ソケット通信による外部ノードとのリモーティングも含まれています。同一ノードで完結するような処理であるはずなのに、上で書いた「あらかじめ用意されている」プログラムにおいて、もしかしたら、ソケット通信を行うコードが含まれているのかもしれない、というのを、若干、苦しいですが、ひとつの仮定の材料にしましょう。。。。 これをふまえて、以下の2つが解決のヒントになると思います。 1.実行前と実行後のポートの状況を比較して、ポート番号から何の処理をしようとしているか推測する 実行前に、コマンドプロンプトから netstat /a で実行前のポートの状況をメモしておき、ウィルスバスターの警告で通信を許可して実行し、その状態での netstat /a と、実行前の結果を比較すれば、どのポートで通信をしようとしているのかわかります。ポート番号で検索してみれば、実行しようとしている処理が何かわかるかもしれません。 2.多重起動のチェックを自前で実装する アプリケーションの起動時にすでに同一のプログラムが起動しているかチェックして、起動していれば、プログラムを終了させる、というコードを自前で書く方法もあります。 以下のurlが詳しいです。 http://dobon.net/vb/dotnet/process/checkprevinstance.html これらの実装をしてみても、ウィルスバスターが警告を出すのならば、ウィルスバスター的に危険な処理ということなのでしょう。:-)