私のプログラムはInno Setupを使用してそれをインストール/アンインストールします。私のアプリケーションコードでは、CreateMutex
Windows API関数を使用してグローバル mutexを作成します。その後、私のInno Setupのプログラムの中で、私は次のコードを持っている:これは素晴らしい作品ログオンしているユーザーがインストール/アンインストールしようとしているアプリケーションを実行しているかどうかを確認します
AppMutex=Global\MyProgramMutex.2A23834B-2919-4007-8C0A-3C7EDCA7186E
function InitializeSetup(): Boolean;
begin
Result := True;
if (CreateMutex(0, False, '{#SetupSetting('AppId')}') <> 0) and (DLLGetLastError = ERROR_ALREADY_EXISTS) then
begin
Result := False;
MsgBox('Another instance of the Setup program is already running. Please close it and try again', mbCriticalError, MB_OK);
end;
if CheckForMutexes('{#SetupSetting('AppMutex')}') then
begin
Result := False;
MsgBox('{#SetupSetting('AppName')} ' + 'appears to be running. Please close all instances of the program before continuing.', mbCriticalError, MB_OK);
end;
end;
、予想通り、Inno Setupのプログラムを実行しているユーザーのために。私が持っている質問/問題は次のとおりです。「ユーザーの切り替え」を行い、別のユーザーとしてアプリケーションを起動して元のユーザーに戻すと、アプリケーションが別のユーザーで実行されていることが検出されません。
セットアッププログラムが実行中のアプリケーションを検出できるかどうかを知るには十分な知識がありません。 Inno SetupのKB Detect instances running in any user session with AppMutexで、文書化されたよう
あなたはhttps://msdn.microsoft.com/en-us/library/system.threading.mutex.aspxごとなどのグローバル\接頭辞としているので、それがうまく動作するはずのように思えます。上のコードは、セットアップアセンブリまたはアプリケーションアセンブリからですか? – Botonomous
AppMutexを動作させるためのコードを追加する必要はありません。アプリケーションのコードが疑わしいでしょう。 [こちらは](http://www.jrsoftware.org/iskb.php?mutexsessions)のkbエントリです。 [Here](http://stackoverflow.com/q/229565/243614)は、アプリケーション側についての質問です。 –