Laden...

Forenbeiträge von Felwebel Ingesamt 7 Beiträge

13.12.2019 - 17:31 Uhr

Hi
erstmal danke für eure Unterstüzung.

ich hab das Try-Catch jetzt eingebaut also fehler hab ich jetzt keinen mehr jedoch wird der Ping Befehl
immer nach wie vor ausgeführt wenn ich auf den Button Beenden klicke.
Habt ihr vielleit noch ne Idee?

Mein Code sieht jetzt so aus:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace CMDAusführen
{
    public partial class Form1 : Form
    {
        private Process proc;
    
        public Form1()
        {
            InitializeComponent();
        }

     

        private void cmbAusführen_Click(object sender, EventArgs e)
        {
            proc = new Process();
            startNewThread();

          

   


        }


        public void Log(string line)
        {
            txtAnzeigen.Text += line + System.Environment.NewLine;
        }


        private void startNewThread()
        {
            Thread x = new Thread(new ThreadStart(Ping));
            x.IsBackground = true;
            x.Start();
        }


        private void Ping()
        {



            
            string command = txtStart.Text;

         

            ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd.exe","/c " + command);


            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            proc.StartInfo = procStartInfo;
            proc.Start();



            while (proc.StandardOutput.Peek() > -1)
            {
                Invoke((MethodInvoker)delegate () { Log(proc.StandardOutput.ReadLine()); });
                proc.StandardOutput.DiscardBufferedData();
            }


        }

        private void cmbBeenden_Click(object sender, EventArgs e)
        {
            try
            {
                proc.Kill();
               
             
            }
            catch (InvalidOperationException)

            {
                
            }
        }
    }
}





13.12.2019 - 12:15 Uhr

Hallo
es geht mir nicht nur um den Ping sonder um das CMD ausführen.
also CMD Befehle wie herunter fahren usw kann ich ohne Probleme ausführen das geht alles.
Nur ich Ping ausführe kann ich es nicht mehr beenden, das ist mein Problem.

13.12.2019 - 11:36 Uhr

Soory hier die Fehlermeldung wen ich auf den Button Beenden klicke :


System.InvalidOperationException: "Die Anforderung kann nicht verarbeitet werden, da der Prozess (36500) beendet wurde."

Diese Ausnahme wurde ursprünglich bei dieser Aufrufliste ausgelöst:
	System.Diagnostics.Process.GetProcessHandle(int, bool)
	System.Diagnostics.Process.Kill()
    CMDAusführen.Form1.cmbBeenden_Click(object, System.EventArgs) in Form1.cs
	System.Windows.Forms.Control.OnClick(System.EventArgs)
	System.Windows.Forms.Button.OnClick(System.EventArgs)
	System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs)
	System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message, System.Windows.Forms.MouseButtons, int)
	System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message)
	System.Windows.Forms.ButtonBase.WndProc(ref System.Windows.Forms.Message)
	System.Windows.Forms.Button.WndProc(ref System.Windows.Forms.Message)
    ...
    [Aufrufliste abgeschnitten]


13.12.2019 - 11:06 Uhr

ich hab die Variable proc in der Methode raus genommen.

13.12.2019 - 10:45 Uhr

Ok danke, ich hab versucht das jetzt um zu schreiben aber dann geht irgendwie garnichts mehr.

Ich komm einfach nicht drauf wie ich die Ping Methode bei schreiben soll.
Hättest du vielleicht Zeit mir die Ping Methode umzuschreiben.
Das ich meine Schlussfolgerungen daraus ziehen kann?

13.12.2019 - 08:55 Uhr

Guten Morgen
und schonmal danke, schön für den tip.
Hast du für mich vielleicht nen Tip wie ich das am besten umschreiben könnte.
Das wäre klasse vorab schonmal danke für die Unterstützung.

13.12.2019 - 03:20 Uhr

Hallo Forum

als Neuling meine erste Frage bitte nicht gleich Steinigen, also zu minem Problem.

Ich habe eine Windows Form mit zwei Textboxen eine für die Eingabe von cmd Befehlen und eine für die Ausgabe der Befehle, die Befehle starte ich mit einbem Button.

Dies Funktioniert soweit auch sehr gut.

Jetzt zu meinem Problem ich wollte einen zusätzlichn Button hinzufügen mit dem ich die Ausgabe unterbrechen kann z. B wenn ich den Ping befehl starte läuft diser permanent und ich kann ihn nicht mehr stoppen. ich hab hetzt kine Ahnung wie ich weiter vorgehen soll hänge hier total in der Luft.

Vorab schonmal dnake für eure Hilfe.

Hier ein Code:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace CMDAusführen
{
    public partial class Form1 : Form
    {
        private Process proc;
    
        public Form1()
        {
            InitializeComponent();
        }

     

        private void cmbAusführen_Click(object sender, EventArgs e)
        {
            proc = new Process();
            startNewThread();

        }


        public void Log(string line)
        {
            txtAnzeigen.Text += line + System.Environment.NewLine;
        }


        private void startNewThread()
        {
            Thread x = new Thread(new ThreadStart(Ping));
            x.IsBackground = true;
            x.Start();
        }


        private void Ping()
        {

            string command = txtStart.Text;

            ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd.exe","/c " + command);


            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;

            Process proc = new Process();
            proc.StartInfo = procStartInfo;
            proc.Start();



            while (proc.StandardOutput.Peek() > -1)
            {
                Invoke((MethodInvoker)delegate () { Log(proc.StandardOutput.ReadLine()); });
                proc.StandardOutput.DiscardBufferedData();
            }


        }

        private void cmbBeenden_Click(object sender, EventArgs e)
        {
          proc.Kill();
        }
    }
}




Wenn ich mit proc.Kill(); die Ausführung beenden möchte bekomme ich den Fehler System.InvalidOperationException (Diesem Objekt ist kein Prozess zugeordnet).

Ich habe absolut keine Ahnung wie ich hier weiter vorgehen soll hoffe auf eure Hilfe