Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#1

ShellExecuteEx -> Access denied

  Alt 20. Mär 2014, 11:36
Hallo,

ich stehe etwas auf dem Schlauch..

Wenn ich mit shellExecute eine bat Datei starten will dann funktioniert das so:
Delphi-Quellcode:
 parameter := format('%s',['einige Parameter']);
 if shellExecute(handle,nil,pchar('start_tool.bat'),pChar(parameter),nil,SW_SHOW) <= 32 then
   begin
     fLogger.addItem(format('start_tool.bat %s',[parameter]),0);
     fLogger.addItem(sysErrorMessage(getLastError),0);
   end;
Die Datei start_tool.bat liegt in gleichen Verzeichnis wie die exe.

Nun möchte ich aber shellExecuteEx verwenden.
Ich möchte die gestartete Datei überwachen.
Delphi-Quellcode:
 parameter := format('%s',['einige Parameter']);
 shellExeInfo.cbSize := sizeOf(TShellExecuteInfo);
 shellExeInfo.Wnd := handle;
 shellExeInfo.lpVerb := 'open';
 shellExeInfo.lpFile := pchar('start_tool.bat');
 shellExeInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
 shellExeInfo.lpParameters := pChar(parameter);
 shellExeInfo.lpDirectory := pChar(extractFileDir(paramStr(0)));
 shellExeInfo.nShow := SW_SHOW;
 if not shellExecuteEx(@shellExeInfo) then
   begin
     fLastError := getLastError;
     fLogger.addItem(sysErrorMessage(fLastError)+' ['+intToStr(fLastError)+']',0);
     fReturnValue := 3;
   end
 else
   begin
     try
       repeat
         waitState := MsgWaitForMultipleObjects(1,shellExeInfo.hProcess,false,INFINITE,QS_ALLINPUT);
         if waitState <> WAIT_OBJECT_0 then
           sleep(250);
       until waitState = WAIT_OBJECT_0;
    finally
      closeHandle(shellExeInfo.hProcess);
    end;
 end;
Nur erhalte ich damit immer die Fehlermeldung "Access denied" ErrorCode 5.
Und ich weiß nicht warum?
Jemand eine Idee?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat