2014-02-19 68 views
0

我正在Windows中運行一個進程。該過程由批處理文件「skrmedpostctl_start.bat」啓動。我正在寫一個java項目,它使用skrmedpostctl的輸出。我的系統在Linux平臺上工作,但不在Windows上。問題是,在執行這個skrmedpostctl(Linux中的一個shell腳本,Windows中的一個批處理文件)之前,我正在檢查它是否已經運行。這是我到目前爲止有:如何檢查批處理文件是否在Windows上運行?

switch (CURRENT_OS) { 
    case LINUX: 
     String[] procCheck_SKR = new String[]{"/bin/bash", "-c", "ps -ef | grep MedPost-SKR"}; 
     String[] procCheck_WSD = new String[]{"/bin/bash", "-c", "ps -ef | grep WSD_Server"}; 
     try { 
      String procs_SKR = systemCall(procCheck_SKR); 
      String procs_WSD = systemCall(procCheck_WSD); 
      if (procs_SKR.split("\n").length < 2) 
       systemCall(new String[]{"/bin/bash", "-c", MM_BIN_DIR + "./skrmedpostctl start"}); 
      if (procs_WSD.split("\n").length < 2) 
       systemCall(new String[]{"/bin/bash", "-c", MM_BIN_DIR + "./wsdserverctl start"}); 
     } catch (IOException e) { e.printStackTrace(); System.exit(0); } 
     break; 
    case WINDOWS: 
     String[] procCheck = new String[]{"cmd.exe", "/c", System.getenv("windir") +"\\system32\\tasklist.exe"}; 
     String pidInfo = ""; 
     try { 
      Process proc = Runtime.getRuntime().exec(procCheck); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
      for (String line; (line = reader.readLine()) != null;) 
       pidInfo += line; 
      reader.close(); 
     } catch (IOException e) { e.printStackTrace(); System.exit(0); } 
     if (pidInfo.contains("NAME OF MY PROCESS")) { 
      // do stuff 
     } 
     break; 
    default: throw new IllegalArgumentException("Can't run this program on " + CURRENT_OS); 
} 

的問題是,當我運行該批處理文件,任務管理器只顯示「Windows命令處理器」,而不是實際的名稱。所以,在linux中,我可以做一個「ps -ef | grep ...」來檢查它是否已經在運行,我似乎無法在windows中做同樣的事情。有沒有辦法做到這一點?任何幫助將不勝感激。

回答

1
tasklist /v 

在詳細模式(/v),任務列表返回窗口的標題。您可以從批處理文件中測試批處理文件的名稱或特殊標題集。

+0

試過了。它沒有幫助。附加信息只是說「C:\ Windows \ System32 \ cmd.exe」。 –

+0

@ChthonicProject,如果你包含在批處理文件中,你試圖找到'title something'命令,它是否在檢索列表中不可見? –

+0

如果我使用命令提示符啓動批處理過程,則窗口標題顯示「命令提示符 - skrmedpostctl_start.bat」。但是,如果我只需雙擊該批處理文件或使用Runtime.getRuntime()。exec()從我的Java代碼執行,那麼它只會顯示「C:\ Windows \ System32 \ cmd.exe」。 –

相關問題