Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ausführen CMD (https://www.delphipraxis.net/114529-ausfuehren-cmd.html)

BullsEye 27. Mai 2008 00:27


Ausführen CMD
 
Hallo,

ich bearbeite mit einem Memofeld einen Inhalt (beliebig) und dann will ich nen Button haben, der "ausführen" heißt.
Sprich der Inhalt der Memo wird als *.bat gespeichert, festgelegter Name, und das will ich dann starten, da wollte ich euch nun fragen, welches die eleganteste Methode ist.

Nen BSP hab ich, allerdings ob das das beste ist, weiß ich nicht

Delphi-Quellcode:
procedure TForm1.btnAUSFUHRENClick(Sender: TObject);
begin
Memo1.Lines.SaveToFile('BE.bat');
if ShellExecute(Application.Handle, 'open', PChar('C:\Dokumente und Einstellungen\Admin\Desktop\BE.bat'),
nil, nil, SW_NORMAL) <= 32 then begin
MessageDlg('FEHLER -> Datei nicht gefunden!', mtError, [mbOK], 0);
End;
end;
[edit=SirThornberry]von .NET auf Win32 geändert - Mfg, SirThornberry[/edit]

taaktaak 27. Mai 2008 07:58

Re: Ausführen CMD
 
Moin, Moin,
hast du das Beispiel denn schon getestet? Funktioniert es? Was mir spontan auffällt, du übergibst SaveToFile() nur Name+Extend, ShellExecute() bekommt den vollen Dateipfad. Das würde ich nicht unterschiedlich handhaben, sondern in beiden Fällen die vollständige Pfadangabe übergeben.

DeddyH 27. Mai 2008 08:35

Re: Ausführen CMD
 
Zitat:

Delphi-Quellcode:
if ShellExecute(Application.Handle, 'open', PChar('C:\Dokumente und Einstellungen\Admin\Desktop\BE.bat'),
nil, nil, SW_NORMAL) <= 32 then begin
MessageDlg('FEHLER -> Datei nicht gefunden!', mtError, [mbOK], 0);

Woher willst Du wissen, dass die Datei nicht gefunden wurde? Das ist nur bei Fehlercode 3 (oder war es 2?) der Fall. Ich würde an Deiner Stelle SysErrorMessage verwenden, da weißt Du dann, was schiefgelaufen ist

taaktaak 27. Mai 2008 08:53

Re: Ausführen CMD
 
Moin, Moin,

nicht übel DeddyH! Hier mal die möglichen ErrorCodes von ShellExecute():

Delphi-Quellcode:
case Result of
  $00 : s:='Zuwenig Speicher, Datei zerstört oder ungültige Relokationswerte';
  $02 : s:='Programm/Datei nicht gefunden';
  $03 : s:='Verzeichnis nicht gefunden';
  $05 : s:='Fehler beim Netzwerkzugriff';
  $06 : s:='Bibliothek fordert separate Datensegmente für jede Task an';
  $08 : s:='Zu wenig Speicher';
  $10 : s:='Falsche Windows-Version';
  $11 : s:='Ungültige ausführbare Datei';
  $12 : s:='Anwendung für anderes Betriebssystem';
  $13 : s:='Anwendung für MS-DOS 4.0';
  $14 : s:='Typ der ausführbaren Datei unbekannt';
  $15 : s:='Kann Real-Mode-Anwendung nicht ausführen';
  $16 : s:='Kann keine zweite Instanz laden';
  $19 : s:='Kann keine komprimierte Datei ausführen';
  $1F : s:='Datei ist mit keinem Anwendungsprogramm verknüpft';
  $20 : s:='Ungültige DLL';
   else s:='' // no error

Luckie 27. Mai 2008 08:54

Re: Ausführen CMD
 
Zitat:

Zitat von DeddyH
Ich würde an Deiner Stelle SysErrorMessage verwenden, da weißt Du dann, was schiefgelaufen ist

Ich bin nicht sicher, ob das bei Shellexecute funktioniert.

DeddyH 27. Mai 2008 09:00

Re: Ausführen CMD
 
Bei mir hat es bislang funktioniert (zumindest bei den häufigsten Fehlerursachen).

BullsEye 27. Mai 2008 09:20

Re: Ausführen CMD
 
ja, gut.

werd ich ändern, allerdings löst dies nicht mein "problem"

DeddyH 27. Mai 2008 09:26

Re: Ausführen CMD
 
Eine Batch-Datei ist ja an sich nicht ausführbar, sondern wird durch den Kommandozeileninterpreter (comspec) abgearbeitet. Also würde ich an Deiner Stelle diesen starten und die Batch als Parameter übergeben.

BullsEye 27. Mai 2008 09:36

Re: Ausführen CMD
 
Zitat:

Zitat von DeddyH
Eine Batch-Datei ist ja an sich nicht ausführbar, sondern wird durch den Kommandozeileninterpreter (comspec) abgearbeitet. Also würde ich an Deiner Stelle diesen starten und die Batch als Parameter übergeben.

Aber ob das so sinnvoll ist?
Ich sehe da nur einen Umweg, wenn ich erst CMD starte und dann die Batch lade!
Oder bringt mir das irgendeinen Vorteil?

taaktaak 27. Mai 2008 09:41

Re: Ausführen CMD
 
Moin, Moin,
ich glaub, wir drehen uns im Kreis. Willst du die Batchdatei STARTEN (also Ausführne) oder LADEN? Wenn du sie AUSFÜHREN willst, dann geht das nur über den beschriebenen Weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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