25

アンインストール中に Inno Setup がコンポーネントの削除に失敗するのは、プログラムがまだ実行中であり、実行可能ファイルを削除できないためです。アンインストールを続行する前に、実行中かどうかを確認するにはどうすればよいですか?

4

4 に答える 4

9

AppMutexこのディレクティブを使用して、アプリケーションの実行中にアンインストーラーが続行されないようにします。

[Setup]
AppMutex=MyProgMutex

アプリケーションは、ディレクティブで指定されたミューテックスを作成する必要があります。例については、リンクされたAppMutexディレクティブのドキュメントを参照してください。


アンインストーラーにアプリケーションを強制終了させたい場合は、アプリケーションがまだ実行されているときに、代わりに次のコードを使用します。

function InitializeUninstall(): Boolean;
var
  ErrorCode: Integer;
begin
  if CheckForMutexes('MyProgMutex') and
     (MsgBox('Application is running, do you want to close it?',
             mbConfirmation, MB_OKCANCEL) = IDOK) then
  begin
    Exec('taskkill.exe', '/f /im MyProg.exe', '', SW_HIDE, 
         ewWaitUntilTerminated, ErrorCode);
  end;

  Result := True;
end;

上記のAppMutexディレクティブと同様に、アプリケーションはCheckForMutexes呼び出しで指定されたミューテックスを作成する必要があります。


インストーラーの場合、これをコーディングする必要はありません。インストーラーには再起動マネージャーが組み込まれています。Inno Setup で「taskkill /f /im」を使用して (再) インストールする前にプロセスを強制終了するを
参照してください。

于 2016-09-23T06:05:10.353 に答える