Executar aplicativo ou script externo
13/01/2006
0
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
Posts
13/01/2006
Dopi
{----------------------------------------------------------------------------- - 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;
17/01/2006
Dedi
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.
17/01/2006
Dopi
interface Uses {$ifdef MSWINDOWS} Windows, ShellAPI {$else} Libc {$endif} ;
18/01/2006
Dedi
Não é o caso,eu já havia dicionado ao use a ´Libc´.
18/01/2006
Dopi
18/01/2006
Martins
Interessante isso, muit interessante mesmo, vc poderia me dizer pq isso acontece Daniel?
Pelo visto ainda existem alguns bravos guerreiros do Kylix.
26/01/2006
Dopi
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)
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...
Clique aqui para fazer login e interagir na Comunidade :)