ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como saber a Versão Java pelo Delphi

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
c-guedes
Profissional
Profissional


Registrado: Terça-Feira, 31 de Mai de 2005
Mensagens: 502

MensagemEnviada: Ter Out 22, 2019 6:15 pm    Assunto: Como saber a Versão Java pelo Delphi Responder com Citação

Boa noite devs, estou precisando saber a versão do java instalado na maquina pelo delphi, ter o retorno da versão consegui uma function porem não esta dando certo quando o comando é java -version, outros comandos do CMD até que dão certo, entretanto esse não, segue abaixo o código utilizado:
Código:

function TForm2.GetDosOutput(CMD: string; Diretorio: string = 'C:\'): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  Handle, WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  lStartUpInfo:TStartUpInfo;
begin
  Result := '';
  SA.nLength := SizeOf(SA);
  SA.bInheritHandle := True;
  SA.lpSecurityDescriptor := nil;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);

  try

     FillChar(SI, SizeOf(SI), 0);
     SI.cb := SizeOf(SI);
     SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
     SI.wShowWindow := SW_HIDE;
     SI.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
     SI.hStdOutput := StdOutPipeWrite;
     SI.hStdError := StdOutPipeWrite;

     Handle := CreateProcess(nil, PChar('cmd.exe /c ' + CMD), nil, nil, True, 0, nil, pchar(Diretorio), SI, PI);
     CloseHandle(StdOutPipeWrite);
     if Handle then
       try
         repeat
           WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
           if BytesRead > 0 then begin
             Buffer[BytesRead] := #0;
             Result := Result + String(Buffer);
           end;
         until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
       finally
         CloseHandle(PI.hThread);
         CloseHandle(PI.hProcess);
       end;
   finally
     CloseHandle(StdOutPipeRead);
   end;
end;
//Chamada da proc para um Memo
procedure TForm2.Button1Click(Sender: TObject);
begin
//WinExec('java -version .\resultadoLista.txt', SW_HIDE);
Memo1.Text := GetDosOutput('Java -version', 'C:\');



se usar o comando dir por exemplo funciona certinho.
_________________
Camargo Felis Guedes
"Posso todas as coisas naquele que me fortalece" flp. 4:13
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qua Out 23, 2019 8:39 am    Assunto: Responder com Citação

tenta por o comando com aspas duplas:

Código:
"java -version"

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
c-guedes
Profissional
Profissional


Registrado: Terça-Feira, 31 de Mai de 2005
Mensagens: 502

MensagemEnviada: Qui Out 24, 2019 11:56 am    Assunto: Responder com Citação

ei Joemil, não deu certo continua retornando:
'java' não ‚ reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
_________________
Camargo Felis Guedes
"Posso todas as coisas naquele que me fortalece" flp. 4:13
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Out 24, 2019 12:02 pm    Assunto: Responder com Citação

Tente pelo registro:

Código:
Versao 32 bits
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java

Versao 64
Computador\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JreMetrics

Outra forma
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\4D375FC7688C45F56B7D260BDAF4D39D

Outra forma seria pegar a versão do arquivo:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\javaw.exe

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jarfile\shell\open\command

HKEY_USERS\S-1-5-21-3819459212-2013315343-1445593015-1002\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\{23AF0B26-6145-4917-A118-8A656C3BD540}


Com isto é suficiente para você pegar a versão sem coisas muito complicadas.



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
c-guedes
Profissional
Profissional


Registrado: Terça-Feira, 31 de Mai de 2005
Mensagens: 502

MensagemEnviada: Qui Out 24, 2019 2:25 pm    Assunto: Responder com Citação

eu esteava executando pelo CMD, mas passei direito e deu certo:

peguei o caminho da java_home e completei o para formar o comando completo e deu certo

"C:\Program Files\Java\jdk1.8.0_111\bin\java.exe -version"
_________________
Camargo Felis Guedes
"Posso todas as coisas naquele que me fortalece" flp. 4:13
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
c-guedes
Profissional
Profissional


Registrado: Terça-Feira, 31 de Mai de 2005
Mensagens: 502

MensagemEnviada: Qui Out 24, 2019 2:39 pm    Assunto: Responder com Citação

ficou assim:

Código:

function TForm2.GetDosOutput(CMD: string; Diretorio: string = 'C:\'): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  Handle, WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  lStartUpInfo:TStartUpInfo;

begin
  Result := '';
  SA.nLength := SizeOf(SA);
  SA.bInheritHandle := True;
  SA.lpSecurityDescriptor := nil;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);

  try

     FillChar(SI, SizeOf(SI), 0);
     SI.cb := SizeOf(SI);
     SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
     SI.wShowWindow := SW_HIDE;
     SI.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
     SI.hStdOutput := StdOutPipeWrite;
     SI.hStdError := StdOutPipeWrite;

     Handle := CreateProcess(nil, PChar(GetEnvironmentVariable('JAVA_HOME') + CMD), nil, nil, True, NORMAL_PRIORITY_CLASS, nil, pchar(Diretorio), SI, PI);
     CloseHandle(StdOutPipeWrite);
     if Handle then
       try
         repeat
           WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
           if BytesRead > 0 then begin
             Buffer[BytesRead] := #0;
             Result := Result + String(Buffer);
           end;
         until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
       finally
         CloseHandle(PI.hThread);
         CloseHandle(PI.hProcess);
       end;
   finally
     CloseHandle(StdOutPipeRead);
   end;
end;

{ Chamada da Function}
procedure TForm2.Button1Click(Sender: TObject);
begin

Memo1.text := GetDosOutput('\bin\java.exe -version', 'C:\');
//Memo1.text := GetDosOutput(' java.exe -version 2', $(JAVA_HOME)');


a mesma sera simplificada uma vez que será utilizada somente para a versão do java.
_________________
Camargo Felis Guedes
"Posso todas as coisas naquele que me fortalece" flp. 4:13
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Dom Out 27, 2019 5:29 pm    Assunto: Responder com Citação

Você também pode executar diretamente a dll do java para obter a versão. Olhe esse post com a unit UVersaoJava:

http://www.activedelphi.com.br/forum/viewtopic.php?t=47655&postdays=0&postorder=asc&start=225

Só fique atento para versões 32/64 bits do Java.
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB