AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) CreateProcess - wie denn nun? (chkdsk.exe)
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess - wie denn nun? (chkdsk.exe)

Ein Thema von Schwedenbitter · begonnen am 27. Mai 2011 · letzter Beitrag vom 28. Mai 2011
 
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

CreateProcess - wie denn nun? (chkdsk.exe)

  Alt 27. Mai 2011, 22:26
Hallo,

ich bin gerade dabei, mich daran zu versuchen die Ausgabe von chkdsk in mein Programm umzuleiten (wie z.B. hier beschrieben).

Ich habe aber Probleme mit CreateProcess(). Ich habe neben meiner Testversion auch die Unit RedirectConsole.pas analysiert - in fast jedem Falls wird CreateProcess() unterschiedlich aufgerufen. Laut Deklaration in der Windows.pas (TurboDelphi) müsste es so richtig sein:
Delphi-Quellcode:
// - WORKAROUND begin ----------------------------------------------------------
{$I-}ChDir(CBDrv.Text + '\');{$I+}
// - WORKAROUND end ------------------------------------------------------------         GetSystemDirectory(lBuffer, BufferSize);
If (Not CreateProcess(
   PChar(StrPas(lBuffer) + '\chkdsk.exe'),   // <- lpApplicationName
   PChar(CBDrv.Text),                        // <- lpCommandLine
   nil, nil, True,
   CREATE_NO_WINDOW Or NORMAL_PRIORITY_CLASS, nil,
   nil,                                    // <- lpCurrentDirectory
   lStartI, lProcInfo)) Then
   MessageBox(Handle, PChar(SysErrorMessage(GetLastError)), 'Error: CreateProcess', mb_OK)

...
Rufe ich es aber so auf, erhalte ich als Fehlermeldung: "Windows kann kein Laufwerk überprüfen, das über das Netzwerk angeschlossen ist." Das liegt wohl daran, dass ich den Quelltext auf einem Netzlaufwerk bearbeite/compilieren lasse. Es klappt nur, wenn ich den o.g. Workaround mit laufen lasse.

Nach meinem Verständnis müsste es eigentlich egal sein, weil in CBDrv.Text z.B. 'C:' steht. Auch das Ersetzen von   nil, // <- lpCurrentDirectory durchPChar(CBDrv.Text + '\') // <- lpCurrentDirectory bringt bloß manchmal etwas. Zudem gebe ich doch oben dem Programm über lpCommandLine 'C:' mit, welches Laufwerk er scannen soll.
Wenn ich wiederum
Delphi-Quellcode:
If (Not CreateProcess(
   PChar(StrPas(lBuffer) + '\chkdsk.exe ' + CBDrv.Text),   // <- lpApplicationName
   nil,                                 // <- lpCommandLine
...
angebe, meckert mir Windows die "falsche" Syntax an.

[EDIT]
Am Ende geht es mir darum, wie ich den Parameter '/F' erfolgreich an chkdsk übergeben bekomme.
[/EDIT]

Wie ist es denn nun richtig?

Gruß, Alex

P.S. Bei Bedarf stelle ich auch den Quellcode rein.
Alex Winzer

Geändert von Schwedenbitter (27. Mai 2011 um 22:34 Uhr)
  Mit Zitat antworten Zitat
 


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 01:22 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