2013-11-23 83 views
-1

我想讓我的程序掃描用戶的硬盤驅動器以查找java.exe。掃描Java可執行文件

我是用一個for循環,然後要通過每一個目錄,然後檢查目錄名稱相匹配的那些我會成立,然後在那些爲Java exe文件檢查考慮,但我敢肯定有一個這樣做的效率更高。

關於如何解決這個問題的任何想法?

編輯:

我已經先行一步,並做了一些foreach循環,但它不是太順利。我可能錯過了一些東西:

// Scan for Java executable (java.exe) 
     foreach (String dir in Directory.GetDirectories("C:/")) 
     { 
      if (dir == "Program Files") 
      { 
       foreach (String _dir in Directory.GetDirectories(dir)) { 
        if (_dir == "Java") 
        { 
         foreach (String javaDir in Directory.GetDirectories(_dir)) 
         { 
          if (javaDir == "jre7") 
          { 
           foreach (String binDir in Directory.GetDirectories(javaDir)) { 
            if (binDir == "bin") 
            { 
             foreach (String file in Directory.GetFiles(binDir)) 
             { 
              if (file == "java.exe") 
              { 
               javaExe = file; 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
+0

什麼是最終遊戲? –

回答

1

你只想看看是否有java.exe

File.Exists(@"C:\Program Files\Java\jre7\bin\java.exe") 

您可能需要額外的邏輯,如果需要在Program Files (x86)文件夾的樣子。如果用戶在其他地方安裝了java,這顯然會失敗。

如果你想知道java在哪裏,請看看this other Stack Overflow post

0

您正在尋找java.exe。所以 首先你應該尋找目錄中oracle始終安裝它的java.exe 這應該是在

C:\ Windows \ System32下

以限制搜索,然後在其他目錄搜索。

  var paths = new List<string> 
     { 
      Environment.SystemDirectory, 
      Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)[email protected]"\java", 
      Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)[email protected]"\java", 
      Environment.GetFolderPath(Environment.SpecialFolder.Programs)[email protected]"\java" 
      //C:\ 
      //rest 
     }; 
     foreach (string path in paths) 
     { 
      var ser = Search("java.exe", path); 

      if (!string.IsNullOrEmpty(ser)) 
      { 
       if (File.Exists(ser)) 
       { 
        javaExe = ser; 
        break; 
       } 
      } 
     } 

搜索功能:

private static string Search(string pattern, string root) 
    { 
     if (!Directory.Exists(root)) 
     { 
      return string.Empty; 
     } 
     var paths = new Queue<string>(); 
     paths.Enqueue(root); 
     while (paths.Count > 0) 
     { 
      root = paths.Dequeue(); 
      string[] temp = Directory.GetFiles(root, pattern); 
      foreach (string t in temp) 
      { 
       return t; 
      } 
      temp = Directory.GetDirectories(root); 
      foreach (string t in temp) 
      { 
       paths.Enqueue(t); 
      } 
     } 

     return string.Empty; 
    } 

而且它最好使用this搜索的方法,以避免訪問權限。

注意: 您可以在多個位置找到java.exe。