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
durch
PChar(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.