• ベストアンサー

アプリケーション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を起動して、あるボタンを押すと確認できるようにしたい どのようにすれば、実現できますでしょうか? お手数ですが何卒よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>他のPCがAのパソコンの中のB.exeを使用しているのか確認できるようにしたいのです。 多重起動禁止は、すでに同じプログラムが動作しているかどうかを判断しているから、その逆を考えればいいとは思う。 >絶対条件として、お願いしたいのが、 >・他のPCがAのパソコンの中のB.exeを使用しているかのチェックは、AのパソコンからB.exeを起動して、あるボタンを押すと確認できるようにしたい そのPC-Aにだけ、レジストリキーを追加しておいて、キーがあったらPC-Aと判定するような判定方法しかないと思うけど。 でなければ、設定ファイルとMACアドレスの組み合わせとか。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8519/19367)
回答No.2

>・他の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が終了できなかった場合「使用中」と誤判定されます)

関連するQ&A

  • 「他のユーザーまたは他のアプリケーションが・・」

    iX500を使っています。昨日まで調子よく動いていましたが、突然エラーメッセージが出て動かなくなりました。PCの再起動、iX500の再起動を何回か試してみても同様です。エラーメッセージの内容は「ScanSnapを使用することができませんでした。他のユーザーまたは他のアプリケーションがScanSnapを使用していないことを確認してから再度操作してください」というものです。PCはwin10。アプリケーションは楽々ライブラリを使っています。 ※OKWAVEより補足:「「ScanSnap/fiシリーズ/HHKB」商品について」についての質問です。

  • 自分でインストールしたアプリケーションを他のユーザ名でログインした時も使いたい

    基本的なことを質問させてください。 今までユーザー名は一つしか作ってなかったんですが、他のユーザー名を作成しました。 ユーザーAがインストールしたアプリケーションを、ユーザーBが使えるように、後から設定する方法はありますか。 それとも、インストール時に他のユーザーでも使えるようにインストールするか、ユーザーBでログインし、再度インストールしなければならないのでしょうか。 ユーザーAがインストールしたアプリケーションをユーザーBが起動しようとした場合、権限が云々といったメッセージが出てきて起動できません。 WindowsVISTA HomePremiam 英語バージョン よろしくお願いいたします。

  • ユーザー切り替え時のアプリケーション共有について

    会社で、現在1台のPCを2人のユーザーで共有している人達がいます。 OSはXPで、1台のPCに管理者用、ユーザーA、ユーザーBの3つのアカウントが存在します。 この度Microsoft Wordをインストールするよう頼まれて、インストールをしようとしましたところ上手くいきませんでした。 インストールさえすれば、どのアカウントでもアプリケーションの共有はできると思っておりましたので、 差し当たり管理者用のアカウントでログインして、 普通にインストールを終了させPCを再起動。 管理者用アカウントでは問題なく使用できるのですが、 ユーザーAとBに切り替えるとWordはプログラム一覧の中にも スタートの中にもないという状況です。 複数ユーザーがいる場合、 アプリケーションのインストールは どのようにすれば全員で使用ができるのかを ご教授頂けないでしょうか。 ユーザーの切り替えなどにあまり詳しくないものですから、 もし基本的なことでしたら申し訳ないのですが、 大変困っておりますので どなたかアドバイス頂ければと思います。

  • アプリケーションAから外部アプリケーションBを

    アプリケーションAから外部アプリケーションBを 呼び出す処理。 Bのフォームを常に最前面にして、Aのフォームを操作できないようにしたいです。 ただしAにあるタイマーを止めないようにもしたいです。 そこで [C#] //ファイルを開いて終了まで待機する System.Diagnostics.Process p = System.Diagnostics.Process.Start("C:\\test.exe"); p.WaitForExit(); ※「test.exe」を外部アプリケーションBとする。 を使ったのですが、Aのタイマーが止まってしまいます。 何か良い方法はないでしょうか? 言語はC#です。

  • アプリケーションの起動が一方のユーザでできない

    使用のPCはXPのホームエディションを登載しています。 1台のPCにユーザを3人登録(名をA,B,Cとする)しています。 さて激指という将棋ソフトを購入しインストールし使用していますが、、Aユーザーで使えるものが、BユーザではAと同じ用にデスクトップにショートカットを作って動かしても、、何も画面にでてきません。起動クリックのときにタスクバーはAと同じものが表示されるのですが ショートカット参照のプログラムは同じEXEを指定しています。 何か原因・対策考えられるでしょうか。

  • VC++2010で作ったアプリケーション

    最近VC++でアプリケーションを作りました。 VC++のMFCを使ってです。 簡単なカレンダーなのですが、・・・ そのカレンダーのプログラムをコンパイルするとexeファイルができ、 そのexeファイルをクリックすると、確かに起動し、アプリケーションを使うことができるのですが、 問題はここからで、 このファイル、自分のパソコン上では動くのですが、 ほかの人のパソコン上だと「コンポーネントが見つかりません、mfc100,dllが見つかりません」 とか言う警告が出てしまうのです。 なぜ他のパソコンでは起動できないのですか? もしかして、作ったアプリケーションは、exeファイルだけあってもだめなのでしょうか? よろしく願います。

  • アプリケーションを正しく初期化できません、というメッセージ

    Norton Antivirus2004をWin2000に入れて使っています。 ソフト(WindowsUpdate)のダウンロード中に、シリアルATAHDDの配線が抜けました。固まったので電源オフして、そのまま再起動させました。それ以来、Win2000を起動するたびにSAVScan.exe「アプリケーションが正しく初期化できませんでした。<OK>をクリックしてアプリケーションを終了させて下さい」というメッセージがでます。Win2000は正常に使用できるのですが、ときどき上のメッセージが出て、その都度OKを押しています。 何とか解決できないでしょうか?

  • 別PCのEXEを起動したいのですが・・・

    こんにちは。質問させていただきます。 2台のPCA,Bがありまして、JAVAでAからBの中にあるEXEファイルを起動したいと思っています。 BのEXEはあるツールのOCXを使用して作成されていまして、 そのOCXはBの中にはありますが、Aには登録してありません。 BのPCからEXEを起動した場合は問題なく動作するのですが、 AのPCからexecメソッドを使用しBの中のEXEを指定して起動すると、 「コンボーネント '○○.ocx'、またはその依存関係のひとつが適切に登録されていません。ファイルが存在しないか、あるいは不正です。」 というエラーがでます。 AのPCからexecメソッドを使用した場合、指定したBの中のEXEをAのPCで実行しようとしているから、OCXが登録されていないAではエラーが出るということでしょうか? AのPCにはOCXを登録することをしたくない為、「B自身がEXEを起動する」というような動きにしたいのですがどのようにすれば良いのでしょうか。 文章が分かりにくいと思いますので、回答しにくい場合は指摘してください。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • 指定したアプリケーションをモニターの画面の最前面に出したい。

    お世話になります。 C++6.0 MFCで開発しております。 今、 (1)A.exeのボタンを押すとB.exeを起動 (2)B.exeが終了するとA.exeに終了通知をして、A.exeに処理を戻す。 処理をしているのですが、 (2)のA.exeに処理を戻した後、A.exeが最前面に表示されないのです。 A.exe以外にも、Wordやその他のアプリケーションを開いていた場合、 (2)の時点で、モニター上には、A.exeが最前面に表示したいのですが、 Wordやその他のアプリケーションが最前面に表示されます。 お手数ですが、どのようにすれば、他のアプリと同時起動している際に、 A.exeをモニターの最前面に表示できるか教えていただきたく思います。 以上よろしくお願いします。

  • SP2にバージョンアップしたい

    パソコン未熟なので何度もすみません。今私のPCはXPproSP1です。SP2にバージョンアップしたいのですが、2回チャレンジしましたが<ファイルC\windows\system 32\ftp.exeはひらいているか、または別のアプリケーションが使用しています。アプリケーションをすべて終了してから「再試行」をクリックしてください。>と出ます。どのようにすれば無事SP2にバージョンアップできるか教えて下さい。 どうか、宜しくお願いします。

専門家に質問してみよう