AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein CreateProcess wirft Kernelbase Error
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess wirft Kernelbase Error

Ein Thema von venice2 · begonnen am 2. Apr 2021 · letzter Beitrag vom 4. Apr 2021
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

AW: CreateProcess wirft Kernelbase Error

  Alt 2. Apr 2021, 16:43
Hänge das Projekt mal an falls jemand reinschauen möchte.
Es soll nichts anderes machen als die youtube-dl.exe über "Pipe" zu aktualisieren.

Achtung diese Datei ist nicht im Archiv.

Die Auskommentierte "Function ReadPipe" funktioniert ist aber nicht lesbar (Bild Auskommentierte Funktion)
Die Aktivierte Funktion läßt die Anwendung abstürzen.

Das Update zu erhalten dauert einige zeit warum das so langsam ist keine Ahnung! (gleiche mit der *.bat)
Ist nichts besonderes nur ein Test Projekt.

Wenn alle Stricke reißen mache ich es einfach über eine Batch Datei.

Geändert von venice2 ( 4. Apr 2021 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: CreateProcess wirft Kernelbase Error

  Alt 2. Apr 2021, 17:12
Ich schau mal rein (code), mein erster Gedanke ist, der Puffer ist viel zu klein. Als ich eine Cmd.exe über Pipes umlenkte, brauchte ich schlapp 35kb an puffer.
Mal sehen ob ich richtig nachvollziehen kann was Du da vorhast und eventuell sogar hilfreich sein kann.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: CreateProcess wirft Kernelbase Error

  Alt 2. Apr 2021, 17:14
Ich schau mal rein (code), mein erster Gedanke ist, der Puffer ist viel zu klein. Als ich eine Cmd.exe über Pipes umlenkte, brauchte ich schlapp 35kb an puffer.
Mal sehen ob ich richtig nachvollziehen kann was Du da vorhast und eventuell sogar hilfreich sein kann.
Der Buffer wird gesetzt an Hand vom BufferSize und der ist 38!
Danke für das reinschauen.

Ich habe das Array auf 255 gesetzt.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 03:11
So geht's.. (Aber lahm, selbe Problem mit der Batch Datei)
@KodeZwerg Kannst ja mit der alten vergleichen wenn du bock drauf hast

Nebenbei man kann auch auf UniqueString(CommandLine); verzichten wenn man pchar(CommandLine) so definiert.
pchar(WideString(CommandLine))

Interessant wäre hier eine Art Progressbar (Man sieht nicht wirklich das sich etwas tut) aber ich sehe nicht wo man hier ansetzen kann.
Kenne die max. Durchläufe nicht.

Thema erledigt

Geändert von venice2 ( 4. Apr 2021 um 15:46 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 14:11
Hier noch eine kleine Animation damit man überhaupt etwas sieht das sich was tut.
Function einfach ersetzen.

Delphi-Quellcode:
Function ReadPipe(StdIo: TStdIO): AnsiString;
var
  bAvailable: DWORD;
  Buffer: PAnsiChar;
begin
  if StdIo.stdOut.hRead <> INVALID_HANDLE_VALUE then
  begin
    bAvailable := 0;
    // First, check the size of the current pipe buffer
    PeekNamedPipe(StdIo.stdOut.hRead, nil, 0, nil, @bAvailable, nil);
    // if there is data waiting, fetch it
    if bAvailable > 0 then
    begin
      // set the new length of the result and initialize it
      Buffer := PAnsiChar(StrAlloc(bAvailable + 1));
      try
        ZeroMemory(Buffer, bAvailable + 1);
        // Read all data from the pipe
        ReadFile(StdIo.stdOut.hRead, Buffer^, bAvailable, bAvailable, nil);
        SetLength(result, bAvailable);
        CopyMemory(PAnsiChar(result), Buffer, bAvailable);
      finally
        StrDispose(Buffer);
      end;
    end
    else
    begin
      result := result + '.'; // <<<<<<<< Animation
      sleep(200);
      if length(Result) > 63 then
        Result := '';
    end;
  end
  else
    result := '';
end;
Ok gut mit den Spielereien war nur ein Test Projekt für meinen Video Player.
Eine perfekte Fortschrittanzeige läßt sich leider nicht realisieren.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 16:12
So geht's.. (Aber lahm, selbe Problem mit der Batch Datei)
@KodeZwerg Kannst ja mit der alten vergleichen wenn du bock drauf hast
Da Du mich mit diesem vorhaben begeisterst, bastel ich übers WE was eigenes, wenn fertig dann lass ich auch deinen Code kompilieren und durchlaufen (weil Du was von langsam geschrieben hast)
Ich habe mir gerade mal diese youtube-dl.exe geladen, die hat ja reichlich parameter. Mann-o-mann.
Kannst Du mir bitte anhand eines Kommandozeilen Befehls zeigen was du dann übergibst um alles in Gang zu bringen?
Damit es keine Mißverständisse gibt, sowas meine ich c:\youtube\youtube-dl.exe argument1 argument2 usw.

Danke und vorab Frohe Ostern!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 18:48
Pfad wo sich die exe befindet.
folderyoutube := ExtractFilePath(ParamStr(0)) + 'youtube-dl.exe';

Argument.
folderyoutube + ' -U'
aktualisiert das Exe File
Zitat:
(weil Du was von langsam geschrieben hast)
Das liegt an deren Server denke ich mal. Da kann man auch mit einer Batch nichts dran drehen.
Zitat:
Danke und vorab Frohe Ostern!
Gleichfalls to all

Habe da noch ein Problem
Delphi-Quellcode:
        if not GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, Stophandle{PI.dwProcessId}) then
        begin
Das Handle PI.dwProcessId sollte eigentlich in Ordnung sein wirft aber einen Fehler 'Das Handle ist ungültig'
Aber ist ein anderes Thema.

Geändert von venice2 ( 3. Apr 2021 um 19:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 23:13
folderyoutube + ' -U'
Ich dachte da eher an ein "Lade irgendwas irgendwo hin" ding aber gut, "-U" soll es werden. (-U erzeugt keinen progress-indikator, ich dachte darum geht es Dir)
Delphi-Quellcode:
        if not GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, Stophandle{PI.dwProcessId}) then
        begin
So weit bin ich noch nicht, aber schon mal GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0) probiert?

Wenn die Sterne gut stehen habe ich morgen auch ein paar Demos startklar.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 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-2025 by Thomas Breitkreuz