- ベストアンサー
アプリケーションAを自分以外のユーザ・コンピュータが使っていたらメッセージを出す。
お世話になります。 現在、アプリケーションを作成しております。 VC++6.0 MFCで開発しております。 環境は下記のような状態で使用します。 ・Aのパソコンの中にそのアプリケーション(B.exe)があります。 ・他のPCは、Aのパソコンの中のB.exeを起動してそのアプリケーションを使用します。 ・Aのパソコンの中のB.exeをバージョンアップする権利はAにしかありません。(他のPCにはありません。) そこで、バージョンアップの際に、Aのパソコンから、B.exeを起動→B.exe内のあるボタンを押したら、他のPCがAのパソコンの中のB.exeを使用しているのか確認できるようにしたいのです。 絶対条件として、お願いしたいのが、 ・他のPCがAのパソコンの中のB.exeを使用しているかのチェックは、AのパソコンからB.exeを起動して、あるボタンを押すと確認できるようにしたい どのようにすれば、実現できますでしょうか? お手数ですが何卒よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>他のPCがAのパソコンの中のB.exeを使用しているのか確認できるようにしたいのです。 多重起動禁止は、すでに同じプログラムが動作しているかどうかを判断しているから、その逆を考えればいいとは思う。 >絶対条件として、お願いしたいのが、 >・他のPCがAのパソコンの中のB.exeを使用しているかのチェックは、AのパソコンからB.exeを起動して、あるボタンを押すと確認できるようにしたい そのPC-Aにだけ、レジストリキーを追加しておいて、キーがあったらPC-Aと判定するような判定方法しかないと思うけど。 でなければ、設定ファイルとMACアドレスの組み合わせとか。
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8746/19850)
>・他のPCがAのパソコンの中のB.exeを使用しているかのチェックは、AのパソコンからB.exeを起動して、あるボタンを押すと確認できるようにしたい 「あるボタン」を押したら「B.exe自身を終了させ(ここ、とっても重要)、別の判定用プログラム(例えばC.exe)を起動し、その判定用プログラムでB.exeが使用中かどうか調べる」と言う方法を取らなければなりません。 「B.exe自身を終了させ(ここ、とっても重要)」と書いてある手法が必要な理由は「誰かが使用中かどうか」は後述の方法で簡単に調べられるが「自分以外の誰かが使用中かどうか」は簡単には調べられないから。 なので「自分自身が使用していない」と言う状況の時に限り「誰かが使用中かどうか」を調べれば「自分以外の誰かが使用中かどうか」を調べているのと等しくなる。 逆に言えば「自分自身が使用している限り、自分以外の誰かが使用中かどうかを調べるのはとっても大変」と言うこと。 その為に「何が何でも、B.exe自身を終了させねばならない」のです。 質問者さんが「この手法は気に食わない」と思うのなら、これ以上読む必要はありません。時間の無駄です。 で、別の判定用プログラム(例えばC.exe)では、以下の方法により「判定」を行います。 1.まず「現在起動中のプロセス」をすべてリストし、その中に「B.exe」があるか確認します。 2.「B.exe」があった場合は、Sleep()などで暫く待って1.からやり直します。何度やり直しても「B.exe」のプロセスが居る場合は、B.exeを同時に2つ以上起動している時なので「誰かが起動中」と判定して終了。 3.「B.exe」がプロセスのリストから消えた(または、最初から無かった)場合は、正しくB.exeが終了されたので、次の処理4.に移る。 4.「B.exe」を「リネーム」または「ファイル末尾への追加モードでの書き込みオープン」してみる。リネームまたはオープンに失敗した場合は「誰かが起動中」と判定して終了。 5.リネーム出来てしまった場合は、再度リネームして元に戻す。オープン出来てしまった場合はクローズする。そして「誰も使用していない」と判定して終了。 6.判定が終了した(判定結果を表示し終わった)ら、C.exeはB.exeを再起動し、C.exe自身は終了する。 なお、もし「1~3の処理が面倒」と言うなら「1~3の処理の代わりに、黙って1秒くらい待っている」でも可です。1秒くらい待てば「C.exeを起動したB.exeが終了している筈」なので(もし1秒以内にB.exeが終了できなかった場合「使用中」と誤判定されます)