I私のアプリは、コンピュータ上で一度だけ実行させるためにしようとしています、私のアプリは、複数回実行させるために悪いですので、Webサービスにcomunicateする必要が、現在これでミューテックスを使用してイム:コンピュータごとのアプリケーションの1つのインスタンス、方法?
MyMsg := RegisterWindowMessage('My_Unique_App_Message_Name');
Mutex := CreateMutex(nil, True, 'My_Unique_Application_Mutex_Name');
if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
exit;
現在のところ、これはユーザーあたりアプリケーションのインスタンスを1つに制限していますが、私のアプリケーションは一度に20人以上のユーザーがログインしているWindows Server環境で使用されているため、サーバーごとに1回だけ実行するよう厳密にする必要がありますMutexをグローバルミューテックスとして宣言することですが、次のコードを実行すると失敗します。
MyMsg := RegisterWindowMessage('My_Unique_App_Message_Name');
Mutex := CreateMutex(nil, True, 'Global\My_Unique_Application_Mutex_Name');
if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
begin
exit
何か間違っていますか?私のアプリの2番目のインスタンスを動かさないという信頼できる方法がありますか?
「全く動作しません」という意味を定義する必要があると思います。 'CreateMutex'は0を返しますか?もしそうなら、 'GetLastError'は何を返しますか?おそらく 'ERROR_ACCESS_DENIED'ですか? –
@SertacAkyuz:元のチェックが正しい。 'CreateMutex()'が失敗するか、mutexが既に存在する場合は、アプリケーションを終了します。 CreateMutex()が既存のmutexへのハンドルを返すので、mutexハンドルが0でない場合、変更は "already exists"チェックをバイパスします。 Delphiはデフォルトでブール式を短絡しています。 –
@Remy - それでいいよ、ありがとう。また、私は混在していると...混乱の原因にならないようにコメントを削除しました.. –