Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CreateProcess - Zugriff verweigert beim anstarten von plink.exe (https://www.delphipraxis.net/156666-createprocess-zugriff-verweigert-beim-anstarten-von-plink-exe.html)

pjanfred 10. Dez 2010 09:08

Delphi-Version: 2007

CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Liebe Community,

ich probiere seit 2 Tagen plink per CreateProcess zu starten. Dazu nutze ich folgende Funktion:

Code:
function TFormMain.ExecuteFile(FileName : String; Params : String) : Integer; var
  err           : DWord;
  StartupInfo   : TStartupInfo;
  ProcessInfo   : TProcessInformation;
begin
  FillChar(ProcessInfo,SizeOf(TProcessInformation),0);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb         := Sizeof(StartupInfo);
  StartupInfo.dwFlags    := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWNOACTIVATE;

  if CreateProcess(
    PChar(filename),                          { pointer to executable}
    PChar(params),                 { pointer to command line string }
    nil,                           { pointer to process security attributes }
    nil,                           { pointer to thread security attributes }
    false,                         { handle inheritance flag }
    CREATE_NEW_CONSOLE or          { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil,                           { pointer to new environment block }
    PChar(ExtractFilePath(ParamStr(0))), { pointer to current directory name }
    StartupInfo,                         { pointer to STARTUPINFO }
    ProcessInfo) then                    { pointer to PROCESS_INF }
  begin
    // Warten, bis der Process beendet wurde
    repeat
      err:=WaitforSingleObject(ProcessInfo.hProcess,100); // 100 MSec Warten
      // Application aktualisieren
      Application.ProcessMessages;
    until (err<>WAIT_TIMEOUT);
  end;
  if GetLastError <> 0 then
    result := GetLastError;
  if GetLastError = 0 then
    GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(result));

  // Process schließen
  CloseHandle( ProcessInfo.hProcess );
  CloseHandle( ProcessInfo.hThread );
end;


Diese rufe ich wie folgt auf, als Return bekomme ich den Fehlercode der Fehlermeldung "Zugriff verweigert":
Code:
ExecuteFile('.\include\plink.exe',' -pw pass user@testrechner /verzeichnis/auf/server/datei " --param="123456789" --zeitraum="201011" --euro=1 "');
Rufe ich jedoch das Programm pscp.exe mit dieser Funktion und folgendem Befehl auf, gibt es keinen Fehler:
Code:
ExecuteFile('.\include\pscp.exe','-pw pass user@testrechner:/verzeichnis/auf/server/abzuholendedatei .\daten\')
Hat jemand eine Idee, warum diese Funktion immer diesen Fehler zurück gibt, bzw. weiß jemand woran es liegen könnte?

Gruß

Jan

Edit: Zu erwähnen wäre noch, das das Programm trotz der Meldung richtig ausgeführt wird...

HeikoAdams 10. Dez 2010 11:21

AW: CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Bin ich blind oder hast Du beim Aufruf Deiner Funktion den 2ten Parameter vergessen? :gruebel:

pjanfred 10. Dez 2010 12:43

AW: CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Hups, hab ich beim zensieren wohl das Komma vergessen...

Ich korrigiere es mal

Edit: Ist geändert, Danke

DeddyH 10. Dez 2010 12:50

AW: CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Kann es sein, dass Result nicht in jedem Fall definiert ist (entsprechende Compiler-Warnung)?
Delphi-Quellcode:
if GetLastError <> 0 then
    result := GetLastError;
  if GetLastError = 0 then
    GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(result));
->
Delphi-Quellcode:
result := GetLastError;
  if result = 0 then
    GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(result));

rollstuhlfahrer 10. Dez 2010 14:37

AW: CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Und was meint dein Virenscanner dazu? - Ich könnte mir vorstellen, dass der den Zugriff auf die Datei sperrt.

Bernhard

Assarbad 10. Dez 2010 19:57

AW: CreateProcess - Zugriff verweigert beim anstarten von plink.exe
 
Was passiert denn bei CreateFile auf die plink.exe? Die meisten Virenscanner implementieren einen FS-Filtertreiber, der beim Öffnen von Dateien bereits zuschlägt, aber es wäre nicht auszuschließen, daß einige auch SSDT-Hooks einsetzen.

Ansonsten müßtest du mal ProcMon anwerfen ... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz