| Autor |
Beitrag |
deada
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 23.07.10 13:15
Ralf Jansen hat folgendes geschrieben : | | 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 23.07.10 13:28
C#-Quelltext 1: 2:
| System.Diagnostics.Process meinLieberProcess = System.Diagnostics.Process.Start(startInfo); meinLieberProcess.Kill(); |
|
|
deada 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 23.07.10 13:39
Ralf Jansen hat folgendes geschrieben : | 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
      
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: 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
|
Verfasst: Fr 23.07.10 15:07
Ginge dann nicht:
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
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 23.07.10 15:22
Sich selbst abschießen - super! -)
|
|
besy
Hält's aus hier
Beiträge: 10
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 23.07.10 15:29
Für diesen Beitrag haben gedankt: Kha
|
|
Necaremus
      
Beiträge: 203
Erhaltene Danke: 18
Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
|
Verfasst: 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.
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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      
Beiträge: 203
Erhaltene Danke: 18
Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
|
Verfasst: Fr 23.07.10 16:16
... ich hätt's prinzipiell wie Ralf gemacht. 
|
|
deada 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 23.07.10 17:57
Necaremus hat folgendes geschrieben : | 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.
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
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 23.07.10 18:33
Ralf Jansen hat dir doch schon geschrieben wie man es in C# richtig macht...
|
|
deada 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 26.07.10 08:27
Th69 hat folgendes geschrieben : | | 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..
|
|