![]() |
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; |
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; |
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").
|
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! |
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 ![]() Und bei CreateProcess=False das GetLastError (mit einem SysErrorMessage, bzw. RaiseLastOSError und den Error als Parameter reingeben) |
AW: wie ruft man den WSL auf windows 10 in Delphi auf?
Zitat:
|
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 11:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz