C# .cmd Ausführen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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());
            }
        }
    }
}


Woher ich das weiß:Berufserfahrung

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.

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

Knomle  16.10.2019, 09:50
ProcessInfo info = new ProcessStartInfo("cmd.exe", "/c " + "C:\Users\Irgendwas\Desktop\AAA\BBB\CreateJunctions.cmd");
Process = Process.Start(info);
0
Tastaturbrix 
Beitragsersteller
 16.10.2019, 10:41
@Knomle

Vielen dank für deine Hilfe.

Leider bekomme ich die Fehlermeldung:

"System.Diagnostics.ProcessStartInfo kann nicht implizit in System.Web.ProcessInfo konvertiert werden"

0
pcjobnet  16.10.2019, 09:53

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.

1
Knomle  16.10.2019, 10:02
@pcjobnet

stimmt, hab ich gerade mit was anderem verwechselt. Ein Glück kann man seine Antworten bei gutefrage ja wieder löschen .... nicht ;D

0
pcjobnet  16.10.2019, 10:13
@Knomle

Löschen (oder nachträglich bearbeiten) … genau, wollte ich auch schon. Aber es macht schon Sinn, dass es uns nicht möglich ist, sonst wären die Antworten auf deine Antwort ja irgendwo im leeren Raum.

1

Wird denn die Ordnerstruktur erstellt? Das die Konsole sich sofort wieder schließt, ist ja nichts ungewöhnliches.

Woher ich das weiß:Berufserfahrung – Anwendungsentwickler (vorwiegend .NET)

Tastaturbrix 
Beitragsersteller
 16.10.2019, 10:42

Die Ordnerstrucktur wird nicht erstellt.
Wenn ich die Datei selber ausführe dann funktioniert es.
Datei ist also Ok

0
pcjobnet  16.10.2019, 11:07
@Tastaturbrix

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 :)

0