Einzelnen Beitrag anzeigen

Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#4

Re: CreateProcess aus Dienst heraus

  Alt 4. Apr 2006, 14:10
Hi,

ich benutze erfolgreich diesen Code:
Delphi-Quellcode:
procedure StartApplicationAndWait(const FileName:string);
var sei:TShellExecuteInfoA;
    retval:integer;
begin
  ZeroMemory(@sei, sizeof(sei));
  with sei do begin
    cbSize:=sizeof(sei);
    fMask:=SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
    Wnd:=0;
    lpVerb:='open';
    lpFile:=PAnsiChar(FileName);
    lpParameters:=nil;
    lpDirectory:=PAnsiChar(ExtractFileDir(FileName));
    nShow:=SW_SHOW; // evtl anpassen...
  end;
  if ShellExecuteExA(@sei) then begin
    // Programm ist erfolgreich gestartet
    try
        retval:=WAIT_TIMEOUT;
        
        while (retval = WAIT_TIMEOUT) do begin
          retval:=WaitForSingleObject(sei.hProcess, 500);
          Application.ProcessMessages;
        end;
    finally
      CloseHandle(sei.hProcess);
    end;
    // Programm wurde beendet
  end else begin
    // Programm konnte nicht gestartet werden; anpassen an eigene Logmechanismen
    SysErrorMessage(GetLastError);
  end;
Bei einem Dienst ist außerdem wichtig, unter welchem Benutzernamen er läuft. Probier mal, das Häkchen bei Anmelden -> Lokales Systemkonto -> "Datenaustausch zwischen Dienst und Desktop zulassen" zu aktivieren oder stell dein aktives Konto ein bei Anmelden -> "Dieses Konto".

cu
  Mit Zitat antworten Zitat