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