2014-10-29 3 views
1

Java 8이 설치되어 있고 최신 버전을 실행중인 경우 (jre1.0.0_25) 이라는 폴더가 있어야합니다. C:\Program Files (x86)\Java디렉토리의 폴더 이름을 가져옵니다. VB.net

Java에서 이름 파일의 이름을 어떻게 잡습니까? 시간이 지남에 따라 바뀝니다 (현재 jre1.0.0_25)?

나는
New DirectoryInfo("C:\Program Files (x86)\Java\").Name 

을 시도했지만 작동하지 않았다.

편집 : 질문의

커플이 등장했다.

  1. 이 내가 지금 그것 때문에에 그 오류 아웃, 기대하고 대답 있도록 자바가 데이터베이스에 아무것도 게시되지 않은 데이터베이스 에 쓰기를 만든 Windows 서비스의 일부입니다.
  2. 나는 이미 32 비트 대 64 비트를위한 메서드를 가지고 있습니다.
  3. 집에서만 사용되며 Java가 설치된 방법과 위치를 완벽하게 제어 할 수 있습니다.
  4. 영어로도 제공됩니다.

이것에 대한 몇 가지 지침을 많이 주시면 감사하겠습니다. 미리 감사드립니다.

업데이트 : 데이터베이스에 출력 할 수 있도록 아래의 솔루션을 함수로 변환하려고합니다.

Private Function java() As String 
    Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java") 
    Dim dirInfo = New DirectoryInfo(sourceDir) 
    For Each d In dirInfo.GetDirectories() 
     Console.WriteLine(d.Name) 
    Next 

    java = Console.ReadLine() 
    'Return dirInfo.ToString 


End Function 

지금 당장 다른 것들을 시도해 보니 코드가 비어 있거나 경로가 생길 수 있습니다. 어디서 잘못 가고 있습니까?

답변

0

정확히 어떻게 작동하지 않았는지 알아야합니다. 그러나 ...

당신은 DirectoryInfo.GetDirectories(), 같은 것을에서 결과를 볼 필요가 :

Imports System.IO 

Module Module1 

    Sub Main() 
     Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java") 
     Dim dirInfo = New DirectoryInfo(sourceDir) 
     For Each d In dirInfo.GetDirectories() 
      Console.WriteLine(d.Name) 
     Next 

     Console.ReadLine() 

    End Sub 

End Module 

내 컴퓨터에있는, 출력 :

jre1.8.0_25 
jre6 
jre7 

당신 것 원하는 디렉토리를 파악하는 방법을 결정해야합니다.

Windows가 다른 언어 버전 인 경우 "Program Files (x86)"디렉토리가 다른 이름으로 지정되었을 수 있으므로 Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)을 사용했습니다. 그러나 Java 설치 프로그램은 다른 위치에 설치하도록 허용하므로 더 강력하게 만들려면 설치 위치를 조사해야합니다.

하지만 의도는 자바의 현재 설치된 버전을 확인하는 경우, 당신은 아마 레지스트리 확인해야합니다 : Deploying the JRE on Windows 더 많은 정보를 - 나는 당신이이 계속 적용 여부를 확인하기 위해 몇 가지 검색을 할 수있는 확신 Java 용 8.

Java 검사.DLL

일부 노트 :

  • 또한 86 자바 7 및 x64 자바를 가질 수있는 Java 7 및 Java 8은 x86 버전
  • 에 대한 나란히 설치하는 것이 가능할 것으로 보인다 프로그램이 Environment.SpecialFolder.ProgramFilesX86과 같은 위치에, 86로 Environment.SpecialFolder.ProgramFiles 포인트를 실행하는 컴파일 된 경우 8
  • 를 설치, 그래서 자바
  • 의 x64 버전을 검색하지 않습니다
  • 64 자바 8 8.0 (프로 그 버전을보고 w! 나는 그것이 디렉토리 이름에서 1.8이 될 것이라고 생각했고 java -version은 "java version"1.8.0_25 "라고보고했습니다.)
  • 견고성을 위해, 당신은 당신이 무엇을 설치하고 코드를 조정했는지를 고려해야 할 것입니다 . 이에 따라

나는이 함께했다 :

Function GetMaxJavaVersion() As Decimal 
    ' N.B. If this program is run as x86 then the 64-bit Program Files directory will not be accessed even 
    ' with Environment.SpecialFolder.ProgramFiles 
    Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java") 
    ' search in all the subdirectories for "java.dll" 
    Dim javaDlls = Directory.GetFiles(sourceDir, "java.dll", SearchOption.AllDirectories) 

    ' arrange it so that 0 is returned if not found 
    Dim versions As New List(Of Decimal) From {0D} 

    For Each jd In javaDlls 
     Console.WriteLine(jd) 
     Dim versionInfo = FileVersionInfo.GetVersionInfo(jd) 
     versions.Add(CDec(String.Format("{0}.{1}", versionInfo.ProductMajorPart, versionInfo.ProductMinorPart))) 
    Next 

    Return versions.Max 

End Function 

난 당신이 x86 및 "정상"프로그램 파일 디렉토리의 양쪽 모두를 확인하기 위해 수정할 수 있습니다 확신

+0

내 의도는 잡아 것입니다. 현재 설치된 자바 버전입니다. 이것에 대한 gistry지만 Java 8에는 문제가 있습니다. 문제에 대한 다른 게시물을 참조하십시오. http://stackoverflow.com/questions/26593347/vb-net-use-wild-card-in-my-computer-registry-getvalue – Itomship

+0

원래 게시물의 질문에 답변했습니다. 나는 당신의 대답을 들여다보기 시작할 것입니다. – Itomship

+0

이 질문에 다른 게시물에 대한 링크를 제공했다면 유용했을 것입니다.) 각 디렉토리에서'java.dll'을 찾은 다음, 존재한다면 버전을 얻습니다. 그렇다면 if 하나 이상, 가장 높은 것을 선택하십시오. –

관련 문제