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
Seite 2 von 3     12 3      
venice2
(Gast)

n/a Beiträge
 
#11

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 04: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 16:46 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#12

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 15: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
 
#13

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 17: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
 
#14

AW: CreateProcess wirft Kernelbase Error

  Alt 3. Apr 2021, 19: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 20:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 00: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
venice2
(Gast)

n/a Beiträge
 
#16

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 10:51
Zitat:
So weit bin ich noch nicht, aber schon mal GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0) probiert?
StopHandle ist 0 und PI.dwProcessId > 0 beides erzeugt 'Das Handle ist ungültig'
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#17

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 12:51
Zitat:
Ich dachte da eher an ein "Lade irgendwas irgendwo hin" ding
Interessiert mich persönlich eigentlich nicht weil ich nur die EXE Aktualisieren will, aber gut.

Öffne cmd.exe mit Adminrechten und Paste das da rein.
Zitat:
Video!
youtube-dl.exe -f mp4 --ignore-errors --continue -o "C:\DownLoad\%(title)s-%(id)s.%(ext)s" https://www.youtube.com/watch?v=EChjIHaBjf8
Danach sollte sich die Datei "Top 10 Unforgettable Golden Buzzers on America's Got Talent _ Got Talent Global-EChjIHaBjf8.mp4" unter C:\DownLoad befinden.
Das geht flott aber die Aktualisierung der EXE selber leider nicht.

Zitat:
Nur Audio!
youtube-dl.exe --extract-audio --audio-format mp3 -o "C:\DownLoad\%(title)s-%(id)s.%(ext)s" https://www.youtube.com/watch?v=EChjIHaBjf8
Ohne ID!
youtube-dl.exe --extract-audio --audio-format mp3 -o "C:\DownLoad\%(title)s.%(ext)s" https://www.youtube.com/watch?v=EChjIHaBjf8
Du kannst auch anstelle von mp3 -> m4a verwenden.

Fortschrittanzeige kannst du so verwirklichen.
Aber wie ich schon sagte ich benötige es nicht.
Delphi-Quellcode:
function ExtractTextBetween(const Input, Delim1, Delim2: string): string;
var
  aPos, bPos: Integer;
begin
  result := '';

  aPos := Pos(Delim1, Input);
  if aPos > 0 then
  begin
    bPos := PosEx(Delim2, Input, aPos + Length(Delim1));
    if bPos > 0 then
      result := Copy(Input, aPos + Length(Delim1), bPos - (aPos + Length(Delim1)));
  end;
end;
Delphi-Quellcode:
function GetPercentofVideo(str: String; lastpercent: integer): Integer;
var
  temp:String;
  itemp:integer;
  test:integer;
begin

  temp := ExtractTextBetween(str,'[download]','% of');
  try
    temp := trim(temp);
    Val(temp,itemp,test);
    Result := round(itemp);
  except
    Result := lastpercent;
  end;
end;
Delphi-Quellcode:
aForm.RichEdit1.Text := Output + aForm.RichEdit1.Text;
tmpPercent := GetPercentofVideo(aForm.RichEdit1.Text, percent);
percent := tmpPercent;
aForm.ProgressBar1.Position := percent;
Du kannst mein Projekt damit aktualisieren zum testen.

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

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

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 14:37
Interessiert mich persönlich eigentlich nicht weil ich nur die EXE Aktualisieren will, aber gut.
Boah, so kann man sich Irren, das tut mir voll leid.
Danke für Deine Erklärung wie man es aufruft um was zu erhalten, hatte ich eigentlich nur für Dich benötigt, hat sich ja von selbst erledigt.
(auf cmd ebene nutz ich was für mich besseres, yaydl (hier findet man eine .exe davon), das hat zwar hier und da ein paar macken, aber läuft ordentlich)
auf browser ebene macht es ein plugin, auf Programm ebene nutze ich einen download manager.)

Mein Gedanke war halt, weil Du was von einer progress anzeige meintest, das Du tatsächlich was laden wolltest.
So krass vertan hab ich mich ja schon lange nicht mehr.

Coole Methode ExtractTextBetween(), ich hätte wahrscheinlich den Ansipuffer von der Konsole verwendet um da per Laufzeit was zu regeln, wieder dazu gelernt!

Die Zeit den Update zu beschleunigen, da fällt mir nichts ein, ich habe es zwar schon minimal beschleunigt da ich die Python Skripte direkt nutze, nicht die .exe, aber Python reinladen und das ausführen zu lassen dauert seine Zeit.
(Die Update Prozedur schlingelt sich leider durch fast alle Skripte durch)

Für mich war halt die Herausforderung sehr Interessant mal wieder was Sinnvolles mit Pipes anzustellen.
Wenn es nur ums Update geht würde ich gar nichts darstellen lassen, ein freundliches label "background update in progress" und den im Hintergrund-Thread machen lassen, ob es eine Sekunde oder Stunde dauert kann Dir doch dann egal sein, es liegt ja nicht an Dir.
(Man kann ja eine Kopie starten falls während des updates noch ein Aufruf erfolgt.)
Aber da Du nicht ich bist, hast Du ja eh vollkommen andere Pläne, die ich respektiere.

Nächste Woche lese ich mir alles nochmal durch, update alles so wie Du beschrieben hast.
Danke für die mehr-Arbeit mit der progress anzeige.

2 1/2 verschiedene Wege mit Pipes zu arbeiten habe ich bereits erarbeitet, leider nichts was mehr speed beim ausführen bringt, nur verschiedene Wege um ans Ziel zu kommen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#19

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 14:44
Zitat:
2 1/2 verschiedene Wege mit Pipes zu arbeiten habe ich bereits erarbeitet, leider nichts was mehr speed beim ausführen bringt, nur verschiedene Wege um ans Ziel zu kommen.
Nun ja wenn der Server dabei einschläft kann man selbst nicht viel machen.
Wie Ich schon sagte da hilft auch keine Batch ohne Code. Warum man da keine Fortschrittanzeige implementiert hat beim OutPut ist mir auch ein Rätzel.
Aber solange die Animation läuft sehe ich wenigstens das sich überhaupt was tut.
Zitat:
Coole Methode ExtractTextBetween()
Nicht aus meinem Mist gewachsen

Geändert von venice2 ( 5. Apr 2021 um 03:54 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#20

AW: CreateProcess wirft Kernelbase Error

  Alt 4. Apr 2021, 16:25
Hier ist ein Update mit oben genannten Änderungen.
Url kopieren mit linker Maustaste ins Edit klicken der Rest erklärt sich von selbst.
Sorry mehr mache ich nicht. In meinen Player übernimmt das der Wrapper für Youtube 3DYDYoutube von daher benötige ich es nicht.

Geändert von venice2 ( 7. Apr 2021 um 22:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:50 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