Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   wie ruft man den WSL auf windows 10 in Delphi auf? (https://www.delphipraxis.net/214971-wie-ruft-man-den-wsl-auf-windows-10-delphi-auf.html)

wschrabi 14. Apr 2024 17:46

wie ruft man den WSL auf windows 10 in Delphi auf?
 
Liebe Leute,
ich habe hier diesen code (unten) und bekommen diesen Fehler:
Fehler beim Starten des WSL-Prozesses
cmd: wsl find . - type f -name socpus*.ris -exec cat {} + > ../bigmergedscopusfiles.ris

Woran kann das liegen?
DANKE



Delphi-Quellcode:
procedure tform1.RunAWKCommandInWSL(cmd:string);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
  StartupInfo.cb := SizeOf(StartupInfo);
  try
     if CreateProcess(nil, Pchar(format('''%s''',[cmd])) , nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) then
        begin
       // Prozess erfolgreich gestartet
       CloseHandle(ProcessInfo.hProcess);
       CloseHandle(ProcessInfo.hThread);
     end
     else
     begin
       // Fehler beim Starten des Prozesses
       //ShowMessage('Fehler beim Starten des WSL-Prozesses');
       WriteLOgMemo(msg_window, run_mode, clRed, format(' Fehler beim Starten des WSL-Prozesses cmd: %s',[cmd]));
   
     end;
  except
     on E : Exception do
       WriteLOgMemo(msg_window, run_mode, clRed, format(' Exception-error: %s Call: %s',[e.message,format('CreateProcess(nil, Pchar(%s) , nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) ',[cmd])]));
   

  end;
end;

procedure tform1.wslcmd();
begin
   //RunAWKCommandInWSL('dir *.*');
   RunAWKCommandInWSL('wsl find . - type f -name socpus*.ris -exec cat {} + > ../bigmergedscopusfiles.ris');

   


end;

wschrabi 14. Apr 2024 18:09

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
Kann mir sagen wieso ich bei dieser prc kein Zugriffsverletzung bekomme und beim anderen Schon? :?:
Delphi-Quellcode:
procedure tform1.RunAWKCommandInWSL(cmd:string);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  result: boolean;
begin
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  try
 
     Result := CreateProcess(nil, PChar('wsl ' + cmd), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
     if Result then
        begin
          WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
          CloseHandle(ProcessInfo.hProcess);
          CloseHandle(ProcessInfo.hThread);
        end
     else
        begin
       // Fehler beim Starten des Prozesses
       //ShowMessage('Fehler beim Starten des WSL-Prozesses');
       WriteLOgMemo(msg_window, run_mode, clRed, format(' Fehler beim Starten des WSL-Prozesses cmd: %s',[cmd]));
   
        end;
  except
     on E : Exception do
       WriteLOgMemo(msg_window, run_mode, clRed, format(' Exception-error: %s Call: %s',[e.message,format('CreateProcess(nil, Pchar(%s) , nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) ',[cmd])]));
   

  end;
end;

procedure tform1.wslcmd();
begin
    RunAWKCommandInWSL(' find . - type f -name socpus*.ris -exec cat {} + > ../bigmergedscopusfiles.ris');
   
end;

uligerhardt 14. Apr 2024 19:23

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
Höchtstwahrscheinlich offtopic, aber du hast einmal "socpus" und einmal "scopus" (innerhalb von "bigmergedscopusfiles").

TiGü 15. Apr 2024 10:57

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
Geht denn das Kommando grundsätzlich im in deiner Kommandozeile (Cmd, Powershell) außerhalb deiner Applikation?

Ansonsten ist RaiseLastOSError; aus System.SysUtils im Fehlerfall nicht verkehrt!

himitsu 15. Apr 2024 12:15

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
Es wird nur geprüft, ob der Befehl gestartet wurde (bzw. ProgrammDatei gefunden und vielleicht startbar),
aber nicht ob der Befehl auch erfolgreich war (ExitCode/ErrorLevel).

Also erst das schon genannte WaitFor... und anschließend noch MSDN-Library durchsuchenGetExitCodeProcess.

Und bei CreateProcess=False das GetLastError (mit einem SysErrorMessage, bzw. RaiseLastOSError und den Error als Parameter reingeben)

wschrabi 15. Apr 2024 15:26

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
Zitat:

Zitat von uligerhardt (Beitrag 1535746)
Höchtstwahrscheinlich offtopic, aber du hast einmal "socpus" und einmal "scopus" (innerhalb von "bigmergedscopusfiles").

BESTEN DANK!!! Ja das wars immer überlesen :oops:

wschrabi 15. Apr 2024 16:10

AW: wie ruft man den WSL auf windows 10 in Delphi auf?
 
:-D Besten DANK auch für die anderen sehr nützlich Tipps. ahoi


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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