2011-12-08 12 views
1

はい、アプリケーションのexeファイルの名前を取得し、実行中であるかどうかを確認する方法はwell documentedです。問題のアプリケーションがJavaアプリケーションである場合、実行中のexeは常にjava.exeになるので、現在実行されているJavaアプリケーションがいくつでも存在する可能性があるため、このメソッドはフラットになります。 メインクラス名を含む、渡されたコマンドラインパラメータはそれぞれ異なります。NSISから既に実行中のJavaアプリケーションを検出する

java.exeのコマンドラインパラメータを知る必要があるので、java.exe MyProgramという名前のものだけが終了することがわかります。

NSISでどうすればいいですか?

+1

http://stackoverflow.com/questions/62418/knowing-which-java-exe-process-to-kill-on-a-windows-:ここに私のNSISインストーラの1から完全FindWindow機能ですmachine –

+0

アプリを起動するために[JWS](http://stackoverflow.com/tags/java-web-start/info)を選択していないのは残念ですが、['SingleInstanceService'](http: /pscode.org/jws/api.html#sis)が組み込まれています。* "SingleInstanceService'は、任意の時点で画面上にアプリケーションのバージョンが1つしか存在しないことを保証します。アプリケーションの通知方法が呼び出され、開発者はどのような行動を取る必要があるかを判断します。 "*もち​​ろん、JWSはMacOSおよび* nixのフレーバーでも動作します。 JRE。 –

+0

インストールされているアプリケーションが大量で実行するためにいくつかのWindowsソフトウェア(バイオメトリックハードウェアドライバ)が含まれているため、私はそれを行うことはできません。 – Rex

答えて

1

私はFindWindowコマンドを使用します。これは、異なるJavaアプリケーションが異なるウィンドウタイトルを持つことを前提としています。

編集:ウィンドウクラスは必須パラメータですが、空の文字列(任意のウィンドウクラス)は有効なウィンドウクラスパラメータです。

Function filzip_check 
    filzip_check_start: 
     ClearErrors 
     FindWindow $5 "" "FilZip" 
     StrCmp $5 "0" filzip_check_end +1 
     MessageBox MB_OK "Please close any FilZip windows before continuing \ 
       the install" 
     Goto filzip_check_start 
    filzip_check_end: 
FunctionEnd 
+0

私はFindWindowも見ましたが、必須パラメータとしてウィンドウクラスを要求し、オプションパラメータとしてウィンドウタイトルを要求します。これはWin32レベルのものです。私はSpy ++やJavaのアプリケーションのwindowclassを教えてくれるもの(WinSpy ++など)はありません。その標準的な名前はありますか? – Rex

+0

@Rex:私の答えを編集しました。 –

1

コマンドjps -vは、実行中のJavaプロセスにコマンドラインパラメータを提供します。

+0

私の状況では、これを実行するために利用できるJDKがあるとは仮定できませんが、これは便利です。私がインストールしようとしているJavaプログラムは、独自のJREをバンドルしています。 – Rex

関連する問題