2013-11-23 2 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를 설치하면이 작업은 분명히 실패합니다.

자바가 어디에 있는지 알고 싶다면 this other Stack Overflow post을 살펴보십시오.

0

java.exe를 찾고 있습니다. oracle는 항상

C에 있어야 java.exe를 의 설치 위치를 그래서 은 첫째로 당신은 디렉토리를 찾아야한다 :

\ 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를 찾을 수 있습니다.