2011-12-08 61 views
1

是的,它的well documented如何獲取應用程序的exe文件的名稱並查看它是否正在運行。當有問題的應用程序是一個Java應用程序時,正在運行的exe文件將始終是java.exe,所以這種方法在它的表面上是平坦的,因爲可能有許多java應用程序當前正在運行,所有這些應用程序都是用java.exe啓動的。 每個傳遞的命令行參數都會有所不同,包括主類名稱。從NSIS中檢測已在運行的Java應用程序

我需要知道java.exe的命令行參數,所以我可以知道只有一個說java.exe MyProgram將被終止。

我該如何在NSIS中做到這一點?

+1

http://stackoverflow.com/questions/62418/knowing-which-java-exe-process-to-kill-on-a-windows-機器 –

+0

很遺憾你沒有選擇[JWS](http://stackoverflow.com/tags/java-web-start/info)來啓動應用程序,它有['SingleInstanceService'](http:/ /內置的* /「* SingleInstanceService'確保在任何給定的時刻在屏幕上只有一個應用程序版本。如果用戶在已經有實例的情況下打開程序在屏幕上,應用程序的通知方法被調用,並且開發人員可以決定需要採取的操作。「*當然,JWS也適用於MacOS&* nix風格,因爲它們有一個JRE。 –

+0

我不能這樣做,因爲安裝的應用程序非常龐大,並且還包含一些可運行的Windows軟件(生物識別硬件驅動程序)。 – Rex

回答

1

我使用FindWindow命令。這假定不同的Java應用程序具有不同的窗口標題。

編輯添加:雖然窗口類是必需參數,但空字符串(任何窗口類)是有效的窗口類參數。下面是從我NSIS安裝的是一個完整FindWindow功能:

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 ++或我可以下載的任何東西(例如WinSpy ++),它可以告訴我我的Java應用程序的窗口類。有沒有標準的名稱? – Rex

+0

@Rex:編輯我的答案。 –

1

命令jps -v將爲您提供正在運行的Java進程的命令行參數。

+0

謝謝,這很有用,雖然在我的情況下,我不能假定有一個JDK可用來運行這個。我試圖安裝的Java程序捆綁了它自己的JRE。 – Rex

相關問題