2009-08-06 19 views
3

Ich habe eine Reihe von Befehlen wie:Führen Sie einen DOS-Befehl in .NET

C: 
cd Project 
testproj.exe 

Mein System man diese Befehle durch ein von einem entfernten System bekommt. Ich muss jeden Befehl in cmd.exe beim Empfang des Befehls vom Remote-System ausführen. Wie führe ich diese mit .NET aus?

Ich muss auch das Ergebnis von testproj.exe auf dem Remote-Computer zurückgeben. Wie nehme ich das Ergebnis nach dem Ausführen des Befehls?

Antwort

6

Process.Start cmd.exe und Hook StandardIn, StandardOut und StandardError haben. Dann, wenn ein Befehl eintrifft, schreibe ihn einfach in StandardIn und lies StandardOut/Error für die Rückkehr. Das Ganze sollte nicht mehr als 15 LOC sein.

aber sagen, dass nur die Telnet-Server installieren wahrscheinlich einfacher wäre - wie es klingt wie das ist, was Sie im Wesentlichen zu replizieren ....

+0

hat es funktioniert! Danke vielmals! – blitzkriegz

5
var process = System.Diagnostics.Process.Start("testproj.exe"); 
process.WaitForExit(); 
var result = process.ExitCode; 

Dies wird nicht wirklich Dinge wie "C:" oder "CD-Pfad" zu ehren. Stattdessen sollten Sie eine Stapeldatei in einem temporären Ordner erstellen und dann die Stapeldatei aufrufen.

+2

Das wird nicht funktionieren. Sie benötigen einen Prozess.WaitForExit(), um den ExitCode zu erhalten. –

1

Die C: und cd Projekt Operationen können in der lanching Anwendung mit der Verzeichnis Klasse mit den SetCurrentDirectory Verfahren durchgeführt werden.

Dann benutzen Sie einfach die Prozess Klasse die testproj.exe ausführbare Datei zu starten.

1

Anstatt zu versuchen, alle Befehle von DOS zu unterstützen, haben Sie nur eine kleine Teilmenge implementiert, die garantiert, dass nichts schiefgehen kann. Wie nicht erlauben, DELETE, RD, FORMAT usw.

Also, im Grunde würden Sie nur eine Teilmenge von DOS-Befehle haben. Sobald Sie den Befehlssatz haben, können Sie für diese spezifischen Befehle mit einem Erweiterungsmechanismus oder als steckbare Module codieren.

Dies hilft Ihnen auch sicheren Schutz Ihrer Maschine vor böswilligen Angriffen und schlimmsten dort zu geschehen ist, kann Daten aber von der Maschine gesendet werden, können die Daten/System nie geschadet werden.

UPDATE: Die Implementierung bestimmter Befehle bleibt Ihnen überlassen. Sie könnten .NET-API verwenden oder System.Diagnostics.Process

Verwandte Themen