- - PR -
VC++ 実行アプリケーションの2重起動防止について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-19 20:25
はじめましてookuraといいます
VC++6.0を初めて2週間です。 VC++6.0 OS:WindowsXP 実行アプリケーションの2重起動防止をしようとしています。 いままでいろいろと検索し、Mutexを使用するのがよいと思い、実際に試しています。 ただ、CreateMutexの使用方法がわかっていません。 簡単に、notpadを2重起動防止する場合、以下のようにコーディングしています。 ---------------------------------------------------------------------- #include <windows.h> int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,LPSTR lpsCmdLine,int cMdShow){ HANDLE hMutex; hMutex = (NULL,TRUE,"ここに何を書くのかわかっていません"); if (!hMutex) return 0; if (GetLastError() == ERROR_ALREADY_EXISTS) { return 0; } WinExec("notepad.exe",SW_SHOW); return 0; } --------------------------------------------------------------------------- hMutex = (NULL,TRUE,"ここに何を書くのかわかっていません"); 上記に記述したとおりなのですが、notepad.exeを2重起動防止するように、Mutexを使用する場合、どのように何を記述すればよろしいでしょうか? ご教授ください。宜しくお願いいたします。 | ||||
|
投稿日時: 2006-02-19 20:59
第 3 引数は識別名です。 Notepad であれば自由で良いと思いますが、通常はプロセス名などにするでしょう。 VC6 はないけど、参考リンク。 二重起動を確実に禁止する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-19 21:06
>じゃんぬねっと様
ご返信有難うございます。 引用: -------------------------------------------------------------------------------- 第 3 引数は識別名です。 Notepad であれば自由で良いと思いますが、通常はプロセス名などにするでしょう。 -------------------------------------------------------------------------------- hMutex = (NULL,TRUE,"notepad"); と記述しました。 コンパイルは当然通っているのですが、実行ファイル(.exe)をダブルクリックすると notepadが何個も起動してしまいます。 ロジック自体が間違えているといことなのでしょうか? [ メッセージ編集済み 編集者: ookura 編集日時 2006-02-20 00:13 ] | ||||
|
投稿日時: 2006-02-19 21:09
このコードのままだと、実行ファイルが終了しているので当然 Mutex も解放されてしまいますが。 | ||||
|
投稿日時: 2006-02-19 21:16
>Hongliang様
ご返信有難うございます。 引用 ------------------------------------------------------------------------------- このコードのままだと、実行ファイルが終了しているので当然 Mutex も解放されてしまいますが。 ------------------------------------------------------------------------------- 自分のプログラム以外で使用する他のアプリケーションの2重起動防止については、この方法だと適していない・・・ ということなんでしょうか? 確かにMutexオブジェクトが開放されては、何度のnotepadが起動されてしまいすね・・・・。 [ メッセージ編集済み 編集者: ookura 編集日時 2006-02-20 00:13 ] | ||||
|
投稿日時: 2006-02-19 21:22
いや、Notepad の場合、どちらにしても外部からの起動は受け付けちゃいますよね。 Notepad は例で自アプリケーションの二重起動を防止したいのだと思っていたのですが... 最終的に何をなさりたいのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-19 21:26
引用
----------------------------------------------------------------------------- いや、Notepad の場合、どちらにしても外部からの起動は受け付けちゃいますよね。 Notepad は例で自アプリケーションの二重起動を防止したいのだと思っていたのですが... 最終的に何をなさりたいのでしょうか? ----------------------------------------------------------------------------- >じゃんぬねっと様 最終的には、notepadのような自アプリケーション以外ののアプリを起動させたいと思っています。 最初に何をしたいのか明確にしておりませんでした。 [ メッセージ編集済み 編集者: ookura 編集日時 2006-02-19 21:27 ] [ メッセージ編集済み 編集者: ookura 編集日時 2006-02-19 21:31 ] | ||||
|
投稿日時: 2006-02-19 21:48
API の使い方云々よりも、根本的なところに思い違いがあるような気がします。
それは Mutex では制御できません。 CreateMutex() してみたところで、その Mutex の存在をチェックするコードが、この場合は Notepad.exe に存在しなければ、まったくの無意味です。 元々複数起動を許しているアプリケーションを、外部から複数起動禁止にするのはかなり難しいです。 [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-02-19 21:54 ] |