Einzelnen Beitrag anzeigen

Shyran

Registriert seit: 31. Aug 2011
9 Beiträge
 
Delphi XE Professional
 
#46

AW: Problem ShellExecute / CreateProcess + Wait mit Vista UAC

  Alt 9. Sep 2011, 10:22
Auf Jaenicke vertrauend habe ich den Code mal zusammengestaucht:

Delphi-Quellcode:
//SHELL TEST DP
function ExecAndWait(Filename, Params: String;
                     WindowState: Word = SW_SHOWNORMAL): boolean;
var
  {$IFDEF UNICODE} ShExecInfoW: SHELLEXECUTEINFOW; {$ENDIF}
  ShExecInfoA: SHELLEXECUTEINFOA;
// MSDN: ShellExecuteEx, ShellExecuteInfo
begin
  Result := false;
  if (Filename = '') or not FileExists(FileName) then
    exit;
  {$IFDEF UNICODE}
  begin
    ShExecInfoW.Wnd := GetForegroundWindow;
    ShExecInfoW.cbSize := SizeOf(SHELLEXECUTEINFOW);
    ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoW.lpVerb := 'open';
    ShExecInfoW.lpFile := PWideChar(WideString(Filename));
    ShExecInfoW.lpParameters := PWideChar(WideString(Params));
    ShExecInfoW.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename)));
    ShExecInfoW.nShow := WindowState;
    Result := ShellExecuteExW(@ShExecInfoW);
    try
      if Result then WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoW.hProcess);
    end;
  end
  {$ENDIF}
end;
//SHELL Aufruf ENDE DP
Im gleichen Verzeichnis wie das .exe File meines programms beifndet sich auch die Ping.exe (das mach ich später selbstverständlich noch anders, aus dem WIndows-System-verz starten usw. aber zum Testen tut's das hier).

Mein Aufruf:

ExecAndWait('Ping.EXE','192.168.212.253 >> testping.txt');

Resultat ist ein kurzes Aufploppen einer Shell und direktes Schliessen, eine Datei "testping.txt" taucht aber nicht auf oder so.
  Mit Zitat antworten Zitat