Gibt es eine Möglichkeit, Eingabeaufforderungsbefehle in einer C # -Anwendung auszuführen? Wenn ja, wie würde ich Folgendes tun:
copy /b Image1.jpg + Archive.rar Image2.jpg
Dadurch wird im Grunde eine RAR-Datei in das JPG-Bild eingebettet. Ich habe mich nur gefragt, ob es eine Möglichkeit gibt, dies in C # automatisch zu tun.
Antworten:
Dies ist alles, was Sie tun müssen, um Shell-Befehle von C # aus auszuführen
BEARBEITEN:
Dies dient zum Ausblenden des Cmd-Fensters.
BEARBEITEN: 2
Wichtig ist, dass das Argument mit beginnt,
/C
sonst funktioniert es nicht. Wie Scott Ferguson sagte: "Führt den durch die Zeichenfolge angegebenen Befehl aus und wird dann beendet."quelle
Versuchte @ RameshVel-Lösung, aber ich konnte keine Argumente in meiner Konsolenanwendung übergeben. Wenn jemand das gleiche Problem hat, ist hier eine Lösung:
quelle
cmd.StandardInput.WriteLine(@"cd C:\Test; pwd")
quelle
@
Zeichen in C #?proc1.FileName = "C:\\Windows\\System32\\cmd.exe";
proc1.Verb = "runas";
dass dieser Prozess mit erhöhten Berechtigungen ausgeführt wird ... Dies ist nicht immer beabsichtigt.Keine der oben genannten Antworten hat aus irgendeinem Grund geholfen. Es scheint, als würden sie Fehler unter den Teppich kehren und die Fehlerbehebung beim Befehl erschweren. Also habe ich so etwas gemacht, vielleicht hilft es jemand anderem:
quelle
cmd.exe
App verwenden, können Sie Befehle als Argumente übergeben.echo Hello World!
und die Befehlsausgabe im angezeigten cmd-Fenster angezeigt wird. Also habe ich versucht:Filename = @"echo"
,Arguments = "Hello World!"
,UseShellExecute = false
,RedirectStandardOuput = false
,CreateNoWindow = false
. Dadurch konnte im cmd-Fenster der übergeordneten Anwendung "Hello World!" (Dies ist sinnvoll, da stdout nicht zum untergeordneten Prozess umgeleitet wurde.)Obwohl dies technisch gesehen die gestellte Frage nicht direkt beantwortet, beantwortet es die Frage, wie das zu tun ist, was das Originalplakat tun wollte: Dateien kombinieren. Wenn überhaupt, ist dies ein Beitrag, der Neulingen hilft zu verstehen, worüber Instance Hunter und Konstantin sprechen.
Dies ist die Methode, mit der ich Dateien kombiniere (in diesem Fall ein JPG und ein Zip). Beachten Sie, dass ich einen Puffer erstelle, der mit dem Inhalt der Zip-Datei gefüllt wird (in kleinen Blöcken anstatt in einem großen Lesevorgang), und der Puffer dann bis zum Ende der Zip-Datei auf die Rückseite der JPG-Datei geschrieben wird erreicht:
quelle
Wenn Sie das Cmd-Fenster offen halten oder in winform / wpf verwenden möchten, verwenden Sie es wie folgt
Hält das cmd-Fenster offen
quelle
cmd
Befehl und seine Parameter wurde gefunden.Ja, das gibt es (siehe Link in Matt Hamiltons Kommentar), aber es wäre einfacher und besser, die E / A-Klassen von .NET zu verwenden. Sie können File.ReadAllBytes verwenden, um die Dateien zu lesen, und dann File.WriteAllBytes, um die "eingebettete" Version zu schreiben.
quelle
Sie können dies mit CliWrap in einer Zeile tun :
quelle
Unable to find package 'CliWrap' at source
mit einem Verweis auf
Microsoft.VisualBasic
quelle
Hier ist wenig einfache und weniger Code-Version. Das Konsolenfenster wird ebenfalls ausgeblendet.
quelle
Wenn Sie den Befehl im asynchronen Modus ausführen und die Ergebnisse drucken möchten. Sie können Sie diese Klasse:
quelle
Sie können dies mit der folgenden Methode erreichen (wie in anderen Antworten erwähnt):
Als ich die oben aufgeführten Methoden ausprobierte, stellte ich fest, dass mein benutzerdefinierter Befehl mit der Syntax einiger der obigen Antworten nicht funktionierte.
Ich fand heraus, dass komplexere Befehle in Anführungszeichen gesetzt werden müssen, um zu funktionieren:
quelle
Sie können einfach den Code in einer Formaterweiterung schreiben
.bat
, den Code der Batch-Datei:c:/ copy /b Image1.jpg + Archive.rar Image2.jpg
Verwenden Sie diesen C # -Code:
Process.Start("file_name.bat")
quelle
.vbs
CreateObject("Wscript.Shell").Run "filename.bat",0,True