Fórum DELPHI XE SERVIÇO WINDOWS #488817
13/08/2014
0
Boa noite amigos..
sou novo no delphi e estou desenvolvendo um serviço do windows, a função dele é manter outro exe sempre sendo executado, caso este exe seja fechado o serviço chama ele novamente...
de certa forma consegui, mas estou enfrentando alguns problemas:
1º apesar de simples, o myservices.exe esta consumindo 50% do processador
2º ele reabre o .exe se eu o fechar, mas nao mostra nenhuma janela, o .exe fica nos processos mas a janela fica "oculta".
imagino que minha forma de ver se o processo esta sendo executado, e caso não reabri-lo é o que esta consumindo o processador...e em relação a janela ficar oculta não sei o que fazer tb...
abaixo esta a função que uso pra ver se o .exe esta sendo executado e mais abaixo a função dentro do ONEXECUTE....
FUNÇÃO ONEXECUTE do serviço:
alguem teria alguma ideia do que posso fazer pra resolver estas 2 questoes?
muito obrigado!
sou novo no delphi e estou desenvolvendo um serviço do windows, a função dele é manter outro exe sempre sendo executado, caso este exe seja fechado o serviço chama ele novamente...
de certa forma consegui, mas estou enfrentando alguns problemas:
1º apesar de simples, o myservices.exe esta consumindo 50% do processador
2º ele reabre o .exe se eu o fechar, mas nao mostra nenhuma janela, o .exe fica nos processos mas a janela fica "oculta".
imagino que minha forma de ver se o processo esta sendo executado, e caso não reabri-lo é o que esta consumindo o processador...e em relação a janela ficar oculta não sei o que fazer tb...
abaixo esta a função que uso pra ver se o .exe esta sendo executado e mais abaixo a função dentro do ONEXECUTE....
function IsRunningProcess(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
FUNÇÃO ONEXECUTE do serviço:
procedure TsrvPrincipal.ServiceExecute(Sender: TService);
begin
while not self.Terminated do
if IsRunningProcess('notepad.exe') = false then
begin
winexec('notepad.exe',SW_NORMAL);
end
else
ServiceThread.ProcessRequests( false );
end;
alguem teria alguma ideia do que posso fazer pra resolver estas 2 questoes?
muito obrigado!
Luis Luz
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)