C# - Köra cmd kommand i C# applikation

Permalänk
Medlem

C# - Köra cmd kommand i C# applikation

Tjena!

Efter att ha fått upp ögonen för det kända hjälpmedlet ROBOCOPY så blev jag genast sugen på att skapa ett GUI till detta.

Men som vanligt när jag skall programmera något som känns skit simpelt som springer jag på problem!

Det jag försöker göra är alltså ett program där man skriver in "sourcepath" och "targetpath" i varsin textruta. När man sedan trycker på knappen "Execute" så vill jag att ett robocopy script skall köras via CMD.exe, men det fungerar tyvärr mindre bra.

Här kommer koden (det är button3 som är intressant och behöver hjälp med.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string folderPath = ""; FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { folderPath = folderBrowserDialog1.SelectedPath; textBox1.Text = folderPath; } } private void button2_Click(object sender, EventArgs e) { string folderPath = ""; FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { folderPath = folderBrowserDialog1.SelectedPath; textBox2.Text = folderPath; } } private void button3_Click(object sender, EventArgs e) { string srcpath = textBox1.Text; string tarpath = textBox2.Text; string cmdcmd = @robocopy + srcpath + " " + tarpath; ProcessStartInfo cmd = new ProcessStartInfo("cmd", cmdcmd); cmd.RedirectStandardInput = true; cmd.RedirectStandardOutput = true; cmd.RedirectStandardError = true; cmd.UseShellExecute = false; cmd.CreateNoWindow = true; cmd.WindowStyle = ProcessWindowStyle.Hidden; Process console = Process.Start(cmd); } } }

När jag försöker trycka på "Execute" knappen så gnäller den på sista raden "Process console = Process.Start(cmd);" över att filen inte finns.
Jag har även försökt köra programmet cmd.exe med argument men det har inte heller fungerat.

Någon som kan hjälpa mig med detta?

Visa signatur

[Intel Core i5 2500k] [Asus P8Z68-V Pro] [2x ATI 6950 1gb] [Fractal Design XL] [Corsair HX 750W] [Corsair 16Gb 1600MHz] [OCZ SSD Vertex3 120GB]

Permalänk
Medlem
Skrivet av Stylaren:

Testa att köra cmd.Start(); istället för Process console = Process.Start(cmd); på sista raden.

Permalänk
Medlem
Skrivet av Krass:

Testa att köra cmd.Start(); istället för Process console = Process.Start(cmd); på sista raden.

Tack för ditt svar, fungerade tyvärr inte.

Error 2 'System.Diagnostics.ProcessStartInfo' does not contain a definition for 'Start' and no extension method 'Start' accepting a first argument of type 'System.Diagnostics.ProcessStartInfo' could be found (are you missing a using directive or an assembly reference?) C:\Users\Stylaren\Desktop\robocopy\robocopy\Form1.cs 75 17 robocopy

Visa signatur

[Intel Core i5 2500k] [Asus P8Z68-V Pro] [2x ATI 6950 1gb] [Fractal Design XL] [Corsair HX 750W] [Corsair 16Gb 1600MHz] [OCZ SSD Vertex3 120GB]

Permalänk
Medlem
Skrivet av Stylaren:

Tack för ditt svar, fungerade tyvärr inte.

Hmm, skumt. Jag brukar köra med följande kodrader när jag vill köra något externt program i bakgrunden:

System.Diagnostics.Process theProcess = new System.Diagnostics.Process(); theProcess.StartInfo.FileName = @C:\foldername\filename.exe; theProcess.StartInfo.Arguments = ""; theProcess.Start();

Och konstruktorn med 2 inparametrar som du anropar är ju bara ett annat sätt att skriva eftersom det är just FileName och Arguments som skickas in. Jag föredrar att skriva på flerader för att få en lättare översikt.

Permalänk
Medlem
Skrivet av Krass:

Hmm, skumt. Jag brukar köra med följande kodrader när jag vill köra något externt program i bakgrunden:

System.Diagnostics.Process theProcess = new System.Diagnostics.Process(); theProcess.StartInfo.FileName = @C:\foldername\filename.exe; theProcess.StartInfo.Arguments = ""; theProcess.Start();

Och konstruktorn med 2 inparametrar som du anropar är ju bara ett annat sätt att skriva eftersom det är just FileName och Arguments som skickas in. Jag föredrar att skriva på flerader för att få en lättare översikt.

Grymt!! Fungerar nu! Körde:

System.Diagnostics.Process theProcess = new System.Diagnostics.Process(); theProcess.StartInfo.FileName = @C:\windows\system32\Robocopy.exe ; theProcess.StartInfo.Arguments = (srcpath) + " " + (tarpath); theProcess.Start();

Stort tack!

Visa signatur

[Intel Core i5 2500k] [Asus P8Z68-V Pro] [2x ATI 6950 1gb] [Fractal Design XL] [Corsair HX 750W] [Corsair 16Gb 1600MHz] [OCZ SSD Vertex3 120GB]