Abrir exe

Delphi

05/02/2009

Olá, fiz um programa de bloqueio de conteúdo, para net, programas e tudo mais, funcionando filé, só que raramente, por alguns erros ele fecha, ai estou criando um serviço pra vigiá-lo, tipo de minuto em minuto verificar se está aberto, até ai tudo bem, mas na hora de chamar o exe pelo serviço não consigo, o winexec não funciona, se alguém tiver alguma idéia agradeço...
Desde já obrigado.


Silveriosepulveda

Silveriosepulveda

Curtidas 0

Respostas

Woinch

Woinch

05/02/2009

Você já tentou debugar o serviço para ver se não está com algum problema? Antes que gere algum tipo de excessão e não execute o WinExec? Caso sim, já tentou utilizar o comando ShellExecute da unit ShellAPI?

Abraços...


GOSTEI 0
Silveriosepulveda

Silveriosepulveda

05/02/2009

Olha, estamos tratando de um Service Aplication, em uma aplicação normal, eu testo a linha de comando com winexec e funciona, da mesma forma dom shellapi, só que no serviço não funciona, não abre o exe.

Valeu pela atenção.


GOSTEI 0
Prgdelphi

Prgdelphi

05/02/2009

Quando você chama o exe a partir do serviço você está informando o seu caminho completo ou somente o nome do executável.

Um problema que eu sei que acontece é esse, quando você vai chamar um exe a partir de um serviço do windows você tem que especificar o caminho completo do arquivo, mesmo que esteja na mesma pasta que o exe do serviço.
[]s


GOSTEI 0
Paullsoftware

Paullsoftware

05/02/2009

Essa função executa um outro exe e fica aguardando sua finalização para continuar a execução, sendo assim, vc pode adapitar as suas necessidades!
function ExecExterno(const FileName, Params: string; const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos }
  CmdLine := ´"´ + Filename + ´"´ + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
  cb := SizeOf(SUInfo);
  dwFlags := STARTF_USESHOWWINDOW;
  wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  { Aguarda até ser finalizado }
  if Result then begin
  WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  { Libera os Handles }
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
  end;
end;


faça o teste...

if ExecExterno(´c:\windows\system32\calc.exe´,´´,SW_NORMAL) then
 ShowMessage(´continuando...´);
veja que a mensagem só será exibida quando finalizar a calculdadora do windows, eu uso essa rotina num gerenciador...

agora vem o pedido, tem como vc me enviar um exemplo de uso desse seu sistema, estou sofrendo muito aqui na empresa com a kralera acessando tudo que não presta, manda um exemplo ai pro meu email, por favor mando: paullsoftware@gmail.com desde já te agradeço :wink:


GOSTEI 0
POSTAR