Fórum Executar aplicativo ou script externo #63479
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
Curtir tópico
+ 0Posts
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;
Gostei + 0
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.
Gostei + 0
17/01/2006
Dopi
interface
Uses {$ifdef MSWINDOWS}
Windows, ShellAPI
{$else}
Libc
{$endif} ;Gostei + 0
18/01/2006
Dedi
Não é o caso,eu já havia dicionado ao use a ´Libc´.
Gostei + 0
18/01/2006
Dopi
Gostei + 0
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.
Gostei + 0
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)