Autor Beitrag
deada
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.07.10 10:33 
Hallo lebe C# Member,

ich habe ein kleines (hoffe ich) Problem.

Ich habe einen Directory chooser der mir ein pfad übergibt. In diesem pfad scanne ich nach den ordner namen.
Die Ordner Namen werden dann in eine Listbox aufgelistet.

Ich habe dann noch zwei Buttons.
1. Start Button
Wenn ich dadrauf klicke sucht er nach eine exe in diesem Ordner und startet Sie anschliesend
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
      //Pfad der Ordner
            string path1 = CurrLoc.Text;
            string bslash = "\\";
            string path2 = CharList.SelectedItem.ToString();
            string fullpath = path1 + bslash + path2;

            MessageBox.Show(fullpath);

            string[] exepath = Directory.GetFiles(fullpath, "*.exe");

            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(exepath[0]);

            System.Diagnostics.Process.Start(startInfo);

2. Kill Button
Und da ist das problem. Ich weiss einfach nicht wie ich das hinbekommen soll den Prozess zu beenden. ProzessID, ProzessName keine Ahnung.
Da ich ja auch mehrere Starten werde(Aus verschiedenen Ordner) muss ich i-wie den Prozess zurückverfolgen.

In Java hab ich es hinbekomm und dort hab ich es mit einer for schleife, Prozess und ne HashTable gemacht.
Ich bin noch neu in C# und brauch deswegen eure hilfe!

LG,

deada
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 23.07.10 12:02 
Der Aufruf von Process.Start liefert dir eine Process Instanz zurück die du dir einfach nur merken musst. Auf dieser Instanz kannst du die Kill() Methode aufrufen um den Prozess wieder zu beenden.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 23.07.10 12:03 
Hi,

ja Java ist an dieser Stelle nicht so geschickt wie .NET ;) Allerdings muss man trotzdem wissen wie es geht.

Wenn du in MSDN schaust (ich google immer nach dem Schlagwort und dann "msdn .net c#" dran). Gelangt man zur MSDN-Seite die die sagt, dass die Prozedur ein Prozess Instanz zurück gibt.

Gehst du auf die Methoden der Prozess Klasse findest du die Methode Kill
Zitat:
Kill Hält den zugeordneten Prozess sofort an.


Viel Spaß damit & Gruß
deada Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.07.10 13:15 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Der Aufruf von Process.Start liefert dir eine Process Instanz zurück die du dir einfach nur merken musst. Auf dieser Instanz kannst du die Kill() Methode aufrufen um den Prozess wieder zu beenden.


Wie kann ich es den implementieren?

Die Methoden kannte ich, nur wusste ich nicht wie ich sie anwende.

könntest du vllt anhand meines quelltextes was anschreiben, dass ich ein denkstupser bekomme?

lg,

deada
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 23.07.10 13:28 
ausblenden C#-Quelltext
1:
2:
System.Diagnostics.Process meinLieberProcess = System.Diagnostics.Process.Start(startInfo);
meinLieberProcess.Kill();
deada Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.07.10 13:39 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
System.Diagnostics.Process meinLieberProcess = System.Diagnostics.Process.Start(startInfo);
meinLieberProcess.Kill();


Vielen Dank das klappt nun =)

Ich hätt jetzt aber ein weiteres problem:

z.B:

1. starte programm a
2. starte programm b
3. beende durch auswahl in der ListBox programm a, es wird aber programm b beendet.

Wie kann ich das lösen?
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Fr 23.07.10 13:55 
Da hast du wohl nur eine Prozessvariable deklariert, um beide Prozesse zu laden. Und b befindet sich als zu letzt gestarteter Prozess natürlich in der Variable.
besy
Hält's aus hier
Beiträge: 10
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.07.10 15:07 
Ginge dann nicht:

ausblenden C#-Quelltext
1:
2:
Process myProcess = Process.GetCurrentProcess();
myProcess.Kill();


Zumindest unter der Annahme das den Prozess den du auswählst zu beenden der gerade aktive ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 23.07.10 15:22 
Sich selbst abschießen - super! -)
besy
Hält's aus hier
Beiträge: 10
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.07.10 15:28 
Deswegen sagte ich ja, unter der Vorraussetzung das der Prozess der weg soll der gerade aktive ist.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 23.07.10 15:29 
Zitat:
Wie kann ich das lösen?


Schreibe dir eine Klasse zum Verwalten des Anzeigetextes und eines Prozesses.Z.B.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    public class MyProcess
    {
        public string DisplayString { get; set; }
        public Process Process { get; set; }    
    }


Leg dir eine Liste zur Verwaltung entsprechender Instanzen an.

ausblenden C#-Quelltext
1:
    private BindingList<MyProcess> myProcesses = new BindingList<MyProcess>();					


und binde die an deine Listbox

ausblenden C#-Quelltext
1:
2:
   listBox1.DataSource = myProcesses;
    listBox1.DisplayMember = "DisplayString";


wenn du einen Process startest lege in in dieser Liste an.Z.B.

ausblenden C#-Quelltext
1:
myProcesses.Add(new MyProcess() { DisplayString = "notepad", Process = Process.Start("notepad.exe")});					


Zum ~töten~ der Auswahl in der Listbox hol dir das SelectedItem, caste auf unsere Klasse und rufe kill auf.

ausblenden C#-Quelltext
1:
2:
3:
    MyProcess myProcess = listBox1.SelectedItem as MyProcess;
    if ((myProcess != null) && (!myProcess.Process.HasExited))
        myProcess.Process.Kill();

Für diesen Beitrag haben gedankt: Kha
Necaremus
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 203
Erhaltene Danke: 18

Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
BeitragVerfasst: Fr 23.07.10 16:04 
ich hätt's prinzipiell genau so wie derjenige über mir gemacht, nur mit einem TreeView und die Processe an die .Tag eigenschaft der nodes gehängt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void MyAdd(Process proc)
{
 TreeNode n = new TreeNode(proc.Name);
 n.Tag = proc;
 myTreeView.Nodes.Add(n);
}
void MyKill()
{
 Process proc = (Process)myTreeView.SelectedNode.Tag;
 proc.Kill();
}


Nicht ganz so umständlich, finde ich ;)
(sofern es funktioniert[bin selber relativ neu beim proggen], müsste aber klappen, da du an der Tag eigenschaft prinzipiel alles dran hängen kannst)

so far


Zuletzt bearbeitet von Necaremus am Fr 23.07.10 16:17, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 23.07.10 16:11 
Zitat:
hätt's prinzipiell genau so wie derjenige über mir gemacht,


Du kannst auch gerne Ralf zu mir sagen ;)
Necaremus
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 203
Erhaltene Danke: 18

Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
BeitragVerfasst: Fr 23.07.10 16:16 
... ich hätt's prinzipiell wie Ralf gemacht. ;)
deada Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.07.10 17:57 
user profile iconNecaremus hat folgendes geschrieben Zum zitierten Posting springen:
ich hätt's prinzipiell genau so wie derjenige über mir gemacht, nur mit einem TreeView und die Processe an die .Tag eigenschaft der nodes gehängt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void MyAdd(Process proc)
{
 TreeNode n = new TreeNode(proc.Name);
 n.Tag = proc;
 myTreeView.Nodes.Add(n);
}
void MyKill()
{
 Process proc = (Process)myTreeView.SelectedNode.Tag;
 proc.Kill();
}


Nicht ganz so umständlich, finde ich ;)
(sofern es funktioniert[bin selber relativ neu beim proggen], müsste aber klappen, da du an der Tag eigenschaft prinzipiel alles dran hängen kannst)

so far


Was für eine funktion haben die nodes?

Gibt ees den keine möglichkeit es wie in Java zu lösen?

Die listitems einen bestimmtem prozess zuzuordnen? Unter Java ging es mit einer Hashtable, gibt sowas bei C# und wäre das eine lösung?

ich find richtig nett das soviele sich melden.. =)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 23.07.10 18:33 
Ralf Jansen hat dir doch schon geschrieben wie man es in C# richtig macht...
deada Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 26.07.10 08:27 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Ralf Jansen hat dir doch schon geschrieben wie man es in C# richtig macht...


Danke für die vielen antworten. Ich werde mich mal heute dran setzen..