![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_13.png?5a7ff87)
現在、2重起動防止の機能を考えています。
システムとしてはサーバー(Win2003Server)にアプリを置いて、クライアント(WinXP)からリモート接続で繋いでそのアプリを起動します。この時、クライアント1にてアプリを実行していた場合はサーバ及び他クライアントではアプリを起動できないようにしたい。
CreateMutexとWaitForSingleObjectで出来るかと思ったのですが、(作り方が悪いのか)出来ませんでした。(x_x)
VC++6.0を使用しています。VBの経験はそれなりにありますが、VCは初心者です。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
再び失礼します。
> すいません。用語が良くわかりません。ブロードキャストとはなんでしょうか?
仮にも技術者なら多少はご自分で調べてください…
ブロードキャストでググれば山ほど出てきます。
軽く説明しておくと、不特定多数のアドレスに対してメッセージを投げることです。
例えば 192.168.0.255 宛てにメッセージを投げると 192.168.0.1~192.168.0.254 に向けて投げたことことになります。
またブロードキャストを利用する場合はTCP/IPではなくUDPプロトコルを使用します。
UDPは簡単に言えば投げっぱなしのプロトコルです。
TCP/IPのように「送ったよ」「届いたよ」というやりとりがありません。
その代わり高速です。
ちょっと今は忙しくて、また過去のソースも今は手元にないので、サンプルをお出しすることができないのですが、ブロードキャストとUDPをキーに調べてみてください。
お忙しい所、解説ありがとうございます。
ご説明の内容理解できました。
> ブロードキャストとUDPをキーに調べてみてください。
調べてみます。
ありがとうございました。
No.4
- 回答日時:
No.3です。
No.2さんの一時ファイルも、私のいうロックファイルも同じと思いますけどね。それでロックファイルの削除ですが、正常な終了処理ならVCだとOnExitハンドラなどで消せば良いと思いますけど異常処理では難しいでしょうね。
Win32の場合、誰かがオープンしているファイルは消せないという性質を利用して、起動したプロセスはまず最初にロックファイルを消すというのではどうでしょう。
他のプロセスがロックファイルをオープンしていれば消えませんので問題ないですし、異常で残ったファイルなら消せるでしょう。
# 未確認なのでよく確認してください
No.3
- 回答日時:
やりたいことがイマイチ見えないのですけど。
アプリのプロセスはサーバ上で動作するのかクライアント上で動作するのかどっちですか。
サーバがアプリケーション・サーバなのか単にアプリの実行ファイルを置くファイル・サーバなのかと言い換えても良いですけど。
前者ならサーバ上でだけ動作するのでミューテックスによる排他制御で良いでしょう。書き方の問題です。
後者ならアプリの実行ファイルと同じフォルダにロックファイルを作る方法で排他制御するのが良いでしょう。
サーバーでもクライアントでもアプリは起動できるようにしておきたいです。
> 同じフォルダにロックファイルを作る方法
#2のpchan0022000さんの時に私が思っていた懸念事項はコレで解決しそうですね。
ですが、もしロックファイルを作った状態でアプリが不具合やシステムエラーで終了したらロックファイルが残ってしまいますよね。この場合、消す必要があるかと思います。手動では消さずに何らかのタイミングで自動的に消すとか方法はあるのでしょうか。
もし、アプリのプログラムの色々な処理の場所で『エラーが発生したらロックファイルを消す』といった処理を組み込む必要があるとすると手前勝手ではありますが結構手間が掛かってしまいます。(私の考えではそう思ってしまいました。)
どの様にうまい対処をすればよろしいのでしょうか。
もう少しお力をお貸しください。
No.2
- 回答日時:
CreateMutexとWaitForSingleObjectを使用した方法で、サーバー上で2つ同時に起動しましたか?
サーバー上で2つ同時に起動するなら、サーバークライアント環境が問題でなくて、その処理に誤りがある事になるのですが、その辺の切り分けはできているのでしょうか。
サーバークライアント環境なのが問題でCreateMutexが使えないのであれば、起動したら一時ファイルを作成して終了時にそのファイルを削除するようにすれば、起動しているかどうかの判断はできると思います。
この回答への補足
サーバーで2つのアプリ起動テスト(CreateMutexとWaitForSingleObject)は動作確認済です。2重起動チェック出来てます。クライアントとサーバーで起動させる場合はムリでした。
一時ファイルを作成する方法ですが、不用意にあるいは誤って別のクライアントから消された場合に問題があるかと思います。
No.1
- 回答日時:
ミューテックスは同じマシン内でしか通用しないと思います。
以前にやった仕組みは、アプリを立ち上げたらブロードキャストでメッセージを投げます。
応答があれば他のマシンで起動中ということでアプリは終了します。
無事起動できた場合は、ブロードキャストからのメッセージを待ちます。
メッセージが送られてきたら応答します。
こんな感じのものを作りました。
vb.netでしかも知識があいまいなまま作ったのでこれが一般的かはわかりませんが、ご参考までに。
回答ありがとうございます。
>ブロードキャストでメッセージを投げます
すいません。用語が良くわかりません。ブロードキャストとはなんでしょうか?
以下の処理につきましても、何となく出来そうかなとは判りましたが、お忙しいかと思いますが、サンプルプログラムをお時間あったら教えていただけませんでしょうか。
私の方でももっと勉強してみますが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- Windows 10 リモートデスクトップ フォント 2 2023/08/19 18:07
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
- アプリ 某クラウドソーシングサービスの請負契約のキャンセル後に請求された遅延損害金 1 2022/04/08 00:29
- Android(アンドロイド) 外出先でAndroidのスマホでインターネットに接続するには 4 2022/06/17 22:04
- Windows Vista・XP windows xp proが起動しなくなりました 10 2022/05/20 00:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
エクスプローラで選択したファ...
-
EXE間で同期をとりながらデータ...
-
HTMLファイルからexeファイルを...
-
ファイルタイプ関連付を調べる...
-
Session_OnStartを見てくれなか...
-
LabVIEWでEXCELファイルを操作...
-
EXCELバッチコマンド起動...
-
RPA(PowerAutomate)の実装について
-
複数のパソコン間のDir関数につ...
-
system.mdwを見つけることが出...
-
シェルスクリプト間で排他をと...
-
「暁の護衛」をDLしたのですが...
-
(1)APACHEの設定(2)MySQL...
-
エラー この変数は宣言されて...
-
別のAccessファイルのフォーム...
-
Eclipseで、プロジェクト名のと...
-
Eclipse・プロジェクトで、フォ...
-
eclipseでスタックサイズを変更...
-
正しいURL指定しているにもかか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
HTMLファイルからexeファイルを...
-
*.asp の拡張子名がついたht...
-
RPA(PowerAutomate)の実装について
-
jspのエラーが修正できません。
-
別のAccessファイルのフォーム...
-
system.mdwを見つけることが出...
-
量子化学計算ソフト GAMESS の...
-
VBAで作成したマクロをデスクト...
-
Access VBAよりシート名を取得...
-
AccessのMDBファイルを自動で最...
-
LabVIEWでEXCELファイルを操作...
-
EXCELアドイン自動起動マクロ
-
VB5が起動しない
-
エラー この変数は宣言されて...
-
VBでShell○なのにShellExecute×
-
vbsかバッチファイルでmp3を再...
-
64ビットでのビジュアルスタイ...
-
exeファイルが実行中かどうか、...
おすすめ情報