Heute im Kundenforum für CoCreate Modeling (aka PTC Creo Elements/Direct Modeling): Wie startet man aus CoCreate Modeling heraus eine Instanz von cmd.exe mitsamt DOS-Prompt?
Es liegt nahe, das zunächst mit
(sd-sys-exec "cmd.exe")
zu versuchen. Das führt dann aber dazu, dass CoCreate Modeling scheinbar hängt und nichts Erkennbares passiert.
cmd.exe ist ein Kommandozeilenprogramm. Deswegen ist es völlig normal, dass ("grafisch") nichts passiert, wenn man
cmd.exe als externes Programm ohne Parameter startet, zum Beispiel per
sd-sys-exec. Dann wartet
cmd.exe nämlich einfach im Hintergrund auf weitere Eingaben und tut sonst nichts.
Will man
cmd.exe in einem eigenen Terminalfenster (landläufig "DOS-Fenster" oder "command shell" oder "command prompt") starten und interaktiv laufen lassen, kann man das so erreichen:
(sd-sys-exec "start cmd.exe")
(Zu den Kommandozeilenparametern und Besonderheiten des Helferleins
start
siehe
http://ss64.com/nt/start.html.)
Bonusfrage: Wenn
cmd.exe
ein Kommandozeilenprogramm ohne grafische Oberfläche ist, wieso öffnet sich denn ein Terminalfenster, wenn man
cmd.exe
aus Windows Explorer heraus startet?
Antwort: Weil Explorer entsprechend vorkonfiguriert ist - intern wird in so einem Fall nicht einfach nur
cmd.exe
ausgeführt, sondern das moralische Äquivalent zu
start cmd.exe
.
Bonusfrage 2: Woher weiss Windows eigentlich, wo
cmd.exe
liegt? Muss man da nicht einen Pfad wie
C:\Windows\System32\cmd.exe
angeben?
Antwort: Das Verzeichnis, in dem
cmd.exe
liegt, taucht im Inhalt der Umgebungsvariablen
PATH
auf, die Windows beim Starten von Programmen konsultiert. Damit ist die explizite Angabe eines Pfades unnötig. Mehr noch, sie ist sogar kontraproduktiv und fehlerträchtig - denn nicht auf jedem Rechner liegt das Windows-Verzeichnis unter
C:\Windows
.