2013-11-23 2 views
-1

Я хочу, чтобы моя программа сканировала жесткий диск пользователя для java.exe.Сканирование для Java-исполняемого файла

Я рассматривал возможность использования цикла for, а затем через каждый каталог, а затем проверить, соответствуют ли имена каталогов тем, которые я создал, и затем проверить их для java exe, но я уверен, что есть гораздо более эффективный способ сделать это.

Любые идеи о том, как подойти к этому?

Edit:

Я пошел вперед и сделал некоторые 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 в нескольких местах.

Смежные вопросы