Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DosCommand ohne exe (https://www.delphipraxis.net/118034-doscommand-ohne-exe.html)

ysveikata 30. Jul 2008 13:55


DosCommand ohne exe
 
Hallo,

ich habe ein Problem mit dem Ausführen von DosCommands. Habe mir die entsprechende Unit (http://maxxdelphisite.free.fr/doscmd.htm) runtergeladen und grundsätzlich läuft die Ausführung eines Commands in meinem Programm auch, z.B. das Starten einer Exe-Datei:

uses ... DosCommand

var cmd: TDosCommand;

procedure TMainForm.FormCreate(Sender: TObject);
...
cmd:=TDoscommand.Create(self);

procedure ...;
...
cmd.CommandLine := 'h:\mamima\irfanview\i_view32.exe';
cmd.Execute;

Wenn ich nun aber den Exe-Aufruf durch einen simplen Dos-Befehl wie 'md h:\test' oder 'del h:\test.txt' uws. ersetze bekomm ich stets einen TCreateProcessError mit der folgenden Fehlermeldung: 'md h:\test doesn't exist.' Dieser Fehler tritt in der DosCommand-Unit auf beim Versuch einen Prozess zum Commandline-Befehl zu erstellen.

Ich bilde mir ein, dass das Ausführen eines del-Befehls schon mal kurz geklappt hatte, aber ich bekomm s einfach nicht mehr hin. Falls ich nur Exe-Aufrufe und ähnliches mit DosCommand ausführen könnte, dann wär das überflüssig, weil ich ja ShellExecute nehmen kann.

Vielen Dank für nützliche Antworten!

sirius 30. Jul 2008 13:56

Re: DosCommand ohne exe
 
und für das löschen gibt es deletefile.....

Was willst du denn so unbedingt da machen?

gmc616 30. Jul 2008 13:59

Re: DosCommand ohne exe
 
Wenn ich's recht im Kopf habe, muß man DOS-Befehle über die cmd.exe mit Parametern ausführen

Code:
cmd.exe /C del c:\windows\*.*
z.B.

Allerdings funktioniert dieser Aufruf mit ShellExecute. Wie dein DosCommands-Objekt damit umgeht, kann ich dir nicht sagen.

Edit: Ähnlich auch mit *.bat-Dateien.

DeddyH 30. Jul 2008 14:02

Re: DosCommand ohne exe
 
Vielleicht wäre es besser, statt cmd.exe %comspec% auszuwerten (für alte 9x-Kisten).

ysveikata 30. Jul 2008 14:07

Re: DosCommand ohne exe
 
Ich möchte gern sehr viele Dateien eines bestimmten Typs (am besten auch in allen Unterverzeichnissen) löschen.
Meine Vorstellung dazu ist:

Cmd.CommandLine:='del '+GetCurrentDir+'\*.bmp /s';

Ich glaub, ich kann deletefile nicht mit * im Filname aufrufen oder gibts da was?

Danke

Die Muhkuh 30. Jul 2008 14:08

Re: DosCommand ohne exe
 
Du könntest erst alle bmps suchen und diese dann löschen.

ysveikata 30. Jul 2008 14:21

Re: DosCommand ohne exe
 
Vielen Dank für die vielen Antworten.

Ich hab s jetzt über ShellExecute (bzw. ShellExecuteEx) gelöst. Wusste nicht, dass ich dort cmd.exe als Anwendung übergeben kann.

Super und besten Dank, vor allem gmc616!

taaktaak 30. Jul 2008 14:27

Re: DosCommand ohne exe
 
Besser, wenn du den Hinweis von DeddyH beachtest: Früher war "command.com" der Kommandozeileninterpreter. Also den gültigen Namen über %comspec% bestimmen, dann liegst du auf der sicheren Seite.

sirius 30. Jul 2008 14:31

Re: DosCommand ohne exe
 
Das ist aber nicht die feine griechische Art.
Du musst nicht einen anderen Process bemühen um Windows-Befehle auszuführen.

ysveikata 30. Jul 2008 14:41

Re: DosCommand ohne exe
 
Also es läuft jetzt, aber ich mach s natürlich lieber auf der sicheren Seite. Wie müsste ich denn in meinem jetzigen Code ändern um die %compsec% Variante zu wählen?


// Delete Bitmaps.
exstr:='cmd.exe';
pstr:='/C del '+path+'*.bmp';

shexecinfo.cbSize:=sizeof(SHELLEXECUTEINFO);
shexecinfo.fMask:=SEE_MASK_NOCLOSEPROCESS;
shexecinfo.lpVerb:=nil;
shexecinfo.lpFile:=PChar(exstr);
shexecinfo.lpParameters:=PChar(pstr);
shexecinfo.lpDirectory:=nil;
shexecinfo.nShow:=SW_HIDE;

ShellExecuteEx(@shexecinfo);
WaitForSingleObject(shexecinfo.hProcess,INFINITE);



Wieder mal DANKE!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz