Executar aplicativo ou script externo
Amigos,
No delphi desenvolvi um aplicativo que atualiza o relogio um numero x por dia (atualiza via ntp com relogio atomico).
Agora tenho que fazer o mesmo para o linux já que a empresa possui servidores linux, A duvida é como executar um aplicativo externo no kylix, no meu caso penso em executar um o ´ntpdate host_do_servidor´
isso seria possivel como ?
No delphi desenvolvi um aplicativo que atualiza o relogio um numero x por dia (atualiza via ntp com relogio atomico).
Agora tenho que fazer o mesmo para o linux já que a empresa possui servidores linux, A duvida é como executar um aplicativo externo no kylix, no meu caso penso em executar um o ´ntpdate host_do_servidor´
isso seria possivel como ?
Dedi
Curtidas 0
Respostas
Dopi
13/01/2006
Função extraida de ACBrUtil.pas do Projeto ACBr
{----------------------------------------------------------------------------- - Executa programa Externo descrito em "Command", adcionando os Parametros "Params" na linha de comando - Se "Wait" for true para a execução da aplicação para esperar a conclusao do programa externo executado por "Command" - WindowState apenas é utilizado na plataforma Windows ---------------------------------------------------------------------------- } procedure RunCommand(Command: String; Params: String; Wait : Boolean; WindowState : Word); var {$ifdef MSWINDOWS} SUInfo: TStartupInfo; ProcInfo: TProcessInformation; Executed : Boolean ; PCharStr : PChar ; {$endif} ConnectCommand : PChar; begin {$ifdef LINUX} Command := Trim(Command + ´ ´ + Params) ; if not Wait then Command := Command + ´ &´ ; { & = Rodar em BackGround } {$IFNDEF FPC} ConnectCommand := PChar(Command); Libc.system(ConnectCommand); {$ELSE} Shell(Command) {$ENDIF} {$endif} {$ifdef MSWINDOWS} Command := Trim(Command) ; PCharStr := PChar(Trim(Params)) ; if Length(PCharStr) = 0 then PCharStr := nil ; if not Wait then ShellExecute(0,´open´,PChar(Command),PCharStr, nil, WindowState ) // winexec(ConnectCommand, WindowState) else begin ConnectCommand := PChar(Trim(Command + ´ ´ + Params)); PCharStr := PChar(ExtractFilePath(Command)) ; if Length(PCharStr) = 0 then PCharStr := nil ; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Executed := CreateProcess(nil, ConnectCommand, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PCharStr, SUInfo, ProcInfo); try { Aguarda até ser finalizado } if Executed then WaitForSingleObject(ProcInfo.hProcess, INFINITE); finally { Libera os Handles } CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; end; {$endif} end;
GOSTEI 0
Dedi
13/01/2006
Dopi,
apesar de saber que não há nada de errado na função que me passou,não consegui faze o comando funcionar,Creio ser algo referente as permissoes de usuarios.(não tenho grande experiencia com linux).
De qualquer modo Obrigado pela ajuda.
apesar de saber que não há nada de errado na função que me passou,não consegui faze o comando funcionar,Creio ser algo referente as permissoes de usuarios.(não tenho grande experiencia com linux).
De qualquer modo Obrigado pela ajuda.
GOSTEI 0
Dopi
13/01/2006
Não sei se é o caso, mas esqueci de mencionar que faltou o [b:b6550fafda]uses[/b:b6550fafda]:
interface Uses {$ifdef MSWINDOWS} Windows, ShellAPI {$else} Libc {$endif} ;
GOSTEI 0
Dedi
13/01/2006
Não sei se é o caso, mas esqueci de mencionar que faltou o uses:
Código:
interface
Uses {$ifdef MSWINDOWS}
Windows, ShellAPI
{$else}
Libc
{$endif} ;
Não é o caso,eu já havia dicionado ao use a ´Libc´.
GOSTEI 0
Dopi
13/01/2006
Lembrei de mais um detalhe... A função RunCommand não funciona dentro da IDE do Kylix.... Mas quando vc roda o programa fora de IDE ela funciona...
GOSTEI 0
Martins
13/01/2006
Lembrei de mais um detalhe... A função RunCommand não funciona dentro da IDE do Kylix.... Mas quando vc roda o programa fora de IDE ela funciona...
Interessante isso, muit interessante mesmo, vc poderia me dizer pq isso acontece Daniel?
Pelo visto ainda existem alguns bravos guerreiros do Kylix.
GOSTEI 0
Dopi
13/01/2006
Interessante isso, muit interessante mesmo, vc poderia me dizer pq isso acontece Daniel?
Não sei bem ao certo Martins mas acho que deve estar relacionado ao uso do Debug integrado... Acho que se desabilitar ele a execução ocorre (mas não testei ainda)
Pelo visto ainda existem alguns bravos guerreiros do Kylix.
Nem me fale... Cada vez me acho mais louco por ainda estar insistindo no Kylix, mas consegui me cercar de bons componentes e já estou tendo alguns resultados muito bons...Afinal de contas até hoje eu ainda programa em Clipper (e xHarbour)... então linguagem morta é comigo mesmo :wink:
PS.: Desde que me tragam os resultados esperados e produtividade...
PS2.: Desculpas pela demora do reply.. estive fora por uns dias...
GOSTEI 0