C# .cmd Ausführen?
Hallo,
ich würde gerne ein Skript in meinem Programm ausführen.
Dabei handelt es sich um eine .cmd Datei.
Nach Ausführen der Datei sollte eine Ordnerstruktur erstellt werden.
Mein bisheriger Code:
string pfad = @"C:\Users\Irgendwas\Desktop\AAA\BBB\CreateJunctions.cmd";
Process.Start(pfad);
Wenn ich es so ausführe bekomme ich weder eine fehlermeldung, noch sonst was.
Es öffnet sich auch für einen kurzen moment die Konsole.
3 Antworten
Hey :)
Wenn du diesen Code nutzt funktioniert es.
Gera eben selber getestet.
Du bräuchtest da natürlich nur den Code der in dem "cmdStarten_Click" Event steht.
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cmdStarten_Click(object sender, EventArgs e)
{
Process proc = null;
try
{
string batDir = string.Format(@"C:\Users\DeinName\Desktop\");
proc = new Process();
proc.StartInfo.WorkingDirectory = batDir;
proc.StartInfo.FileName = "ordner.cmd";
proc.StartInfo.CreateNoWindow = false;
proc.Start();
proc.WaitForExit();
MessageBox.Show($"{proc.StartInfo.FileName} wurde erfolgreich ausgeführt!");
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace.ToString());
}
}
}
}
Das Process.Start ist schon mal richtig.
Allerdings handelt es sich bei deiner .cmd Datei um keine direkt ausführbare Datei. Du benötigst den Prozess der cmd.exe um diese Datei zu lesen und auszuführen. Argumente musst du bei der Klasse Process immer über ein ProcessInfo Objekt übergeben.
Versuche mal folgendes:
ProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + "C:\Users\Irgendwas\Desktop\AAA\BBB\CreateJunctions.cmd");
Process = Process.Start(ProcessInfo);
Da die cmd.exe eine Umgebungsvariable von Windows ist, benötigst du ihren direkten Pfad normalerweise nicht.
CMD Dateien sind Windows Befehlsskripts und direkt ausführbar, da im System bekannt …
Ist einfach zu testen, einfach im Windows-Ausführen-Dialog angeben und laufen lassen.
ProcessInfo info = new ProcessStartInfo("cmd.exe", "/c " + "C:\Users\Irgendwas\Desktop\AAA\BBB\CreateJunctions.cmd");
Process = Process.Start(info);
Vielen dank für deine Hilfe.
Leider bekomme ich die Fehlermeldung:
"System.Diagnostics.ProcessStartInfo kann nicht implizit in System.Web.ProcessInfo konvertiert werden"
Wird denn die Ordnerstruktur erstellt? Das die Konsole sich sofort wieder schließt, ist ja nichts ungewöhnliches.
Die Ordnerstrucktur wird nicht erstellt.
Wenn ich die Datei selber ausführe dann funktioniert es.
Datei ist also Ok
Die Datei muss nicht zwingend io sein … bzw. nicht angepasst an die Gegebenheiten, dass du aus dem Programm startest...
Also würde ein Blick in die CMD helfen, muss ja nicht deine geheimsten Geheimnisse zeigen :)
Made my Date....
Vielen dank der Herr/Dame what ever !!