AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CMD / Prozess prüfen

Ein Thema von Moombas · begonnen am 1. Apr 2020 · letzter Beitrag vom 1. Apr 2020
Antwort Antwort
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

AW: CMD / Prozess prüfen

  Alt 1. Apr 2020, 12:28
Funktioniert leider nicht.
Delphi-Quellcode:
program Backup;
{$mode Delphi}{$H+}
uses
  ShellAPI, Windows;

{$R *.res}
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  CmdLine: string;
begin
  //ShellExecute(0, nil, PChar('cmd'), PChar('/c wbadmin.exe start backup -quiet -vssCopy -backupTarget:D: -include:C:'), nil, 1);
  CmdLine := 'cmd /c wbadmin start backup -quiet -vssCopy -backupTarget:D: -include:C:';

  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOW;

  if CreateProcess(nil, PChar(CmdLine), nil, nil,
    False, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
  begin
    repeat
    until WaitForSingleObject(ProcessInfo.hProcess, 1) = WAIT_OBJECT_0;
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end
  else
    WriteLn('Cannot run command line: ' + CmdLine);
  sleep(5000);
end.
Bringt kein Ergebnis/wird nicht gestartet bzw. endet beim "Connot run command line".
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 1. Apr 2020 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#2

AW: CMD / Prozess prüfen

  Alt 1. Apr 2020, 12:44
Fehlermeldung?

Bekommst Du die Ausgabe von WriteLn oder einfach nur nix?

Und bei CmdLine wäre es durchaus hilfreich den vollständigen Namen und Pfad des aufzurufenden Programmes anzugeben.

cmd /w hält die Kommandozeile offen, nachdem das per Parameter übergebene Programm beendet wurde. Damit wartet Dein Programm "ewig", bis zum nächsten Stromausfall oder sonst einer "externen Beendigung" der Kommandozeile. Sprich: Kann so nicht funktionieren.

Frage: Muss denn CMD überhaupt aufgerufen werden?

CmdLine := 'PfadZumProgramm\wbadmin.endung start backup -quiet -vssCopy -backupTarget:D: -include:C:';

Beim Programmaufruf über Shellexeute, CreateProcess ... sollte man sich nicht dadrauf verlassen, das Windows das gewünschte schon irgendwie finden wird (das Gewünschte also (mehr oder weniger) zufällig im Pfad ist).

Präzise Angaben helfen deutlich bei der Fehlersuche / Fehlervermeidung.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: CMD / Prozess prüfen

  Alt 1. Apr 2020, 13:11
wbadmin ist eine Windowsanwendung und liegt in System32, kann aber immer per wbadmin aufgerufen werden ohne Pfadangabe.

Der Befehl muss in der Eingabeaufforderung ausgeführt werden.

Ich bekomme die Ausgabe von writeln.

cmd /w hält die Kommandozeile offen, nachdem das per Parameter übergebene Programm beendet wurde. Damit wartet Dein Programm "ewig", bis zum nächsten Stromausfall oder sonst einer "externen Beendigung" der Kommandozeile. Sprich: Kann so nicht funktionieren.
Stimmt das /w ist eigentlich falsch/veraltet (hatte ich eigentlich schon längst geändert) muss /c sein.
Ändert aber an der Ausführung nix, die CMD würde nur offen bleiben anstatt geschlossen zu werden.

Edit:
Hier trifft meine erste Aussage wohl nicht zu:
Mit CmdLine := 'C:/Windows/System32/wbadmin.exe start backup -quiet -vssCopy -backupTarget:D: -include:C:'; funktioniert es.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 1. Apr 2020 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#4

AW: CMD / Prozess prüfen

  Alt 1. Apr 2020, 13:53
Ein möglicher Aufruf auf der Kommandozeile ohne Pfadangabe impliziert nicht, dass dies auch aus einem eigenen Programm heraus so sein muss.

Der Aufruf von wbadmin auf der Kommandozeile ohne Pfadangabe heißt nur, dass das Programm in der Umgebung der Kommandozeile im Suchpfad enthalten ist.

Diese Umgebung muss nicht mit der Umgebung Deines Programmes übereinstimmen und schon garnicht mit der Umgebung, die CreateProcess bekommt.

Das WriteLn bedeutet übrigens hier, dass schon CMD nicht gefunden wurde. Auch hier gilt: Vollständiger Pfad- und Dateiname.
  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 03:15 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