人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

実行ファイルが起動しているかどうかの判定方法(開発環境VC,Windows2000)。
今ソフトウェアaを作成しています。
同じ実行ファイルaの同時起動を禁止しつつ、
『同じディレクトリに存在するリネーム済み実行ファイルa』、『違うディレクトリに存在する実行ファイルa』が同時起動できるようにしたいと考えています。

本で以下の方法を調べ、それをもとにいろいろ試してみたのですが、どうもうまくいきません。
どなたか方法を教えていただきたくよろしくお願いします。

csMutex="testkey";
AfxEnableControlContainer();
m_hMutex = CreateMutex(FALSE, 0, _T(csMutex));
// すでに起動しているか判定
if(GetLastError() == ERROR_ALREADY_EXISTS){ // すでに起動している。
MessageBox(NULL, "すでに起動しています。", "Multiplex starting prevention Test", MB_OK);
ReleaseMutex(m_hMutex);
CloseHandle(m_hMutex);
return FALSE;
}

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:test VC Windows2000 いるか ソフトウェア
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●60ポイント ベストアンサー

「実行プログラムが同一のフルパス(同一ディレクトリ、同一EXE名)の場合のみ、2重起動の禁止を行いたい」ということでしたら、

以下のような方法はいかがでしょうか?

// 実行プログラムのフルパスをミューテックスオブジェクトの名前として取得する
CString GetMutexModuleName()
{
 CString strResult;
 TCHAR szModuleName[MAX_PATH];
 // 実行プログラムのフルパスを取得
 // 例)c:\home\edu\hatena\harunoharuno\1167532314\mutextest\Debug\mutextest.exe
 GetModuleFileName( NULL, szModuleName, MAX_PATH );
 strResult = szModuleName;
 // 大文字・小文字のいずれかに統一する(ここでは大文字に統一)
 // 例)C:\HOME\EDU\HATENA\HARUNOHARUNO\1167532314\MUTEXTEST\DEBUG\MUTEXTEST.EXE
 strResult.MakeUpper();
 // 円記号「¥」を別文字「/」に置き換える
 // 例)C:/HOME/EDU/HATENA/HARUNOHARUNO/1167532314/MUTEXTEST/DEBUG/MUTEXTEST.EXE
 strResult.Replace( _T("\\"), _T("/") );
 return strResult;
}

BOOL CXxxxApp::InitInstance()
{
 //CString csMutex="testkey";
 CString csMutex = GetMutexModuleName(); // 実行プログラムが同一のフルパスの場合に2重起動の禁止を行う
 AfxEnableControlContainer();
 m_hMutex = CreateMutex(FALSE, 0, (LPCTSTR)csMutex);
 // すでに起動しているか判定
 if(GetLastError() == ERROR_ALREADY_EXISTS){ // すでに起動している。
 MessageBox(NULL, "すでに起動しています。", "Multiplex starting prevention Test", MB_OK);
 ReleaseMutex(m_hMutex);
 CloseHandle(m_hMutex);
 return FALSE;
 }
 
 // 省略
}

http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_APPmutex.html

◎質問者からの返答

回答ありがとうございます。教えていただいた方法で、思っていたどおりの動作を実装することができました。教えていただく前にフルパスを取得し、それをCreateMutexに渡すことは試したのですが、¥の/変換が必要だったんですね。勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ