René1709 Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Hi zusammen, hab vor ein paar tagen schon mal die frage für Scripte unter Linux gestellt. Das hat sich allerdings mittlerweile erübrigt. Möchte unter C# ein Programm schreiben das beim Systemstart gestartet wird und im hintergrund überwacht ob ein Prozess läuft oder nicht. Also grob möchte ich ne while schleife haben die so lange ausgeführt wird bis der Porzess nicht mehr läuft. Habe bis jetzt folgendes: string x; x = "vmplayer.exe"; while(Process.GetProcessesByName(x).Length > 0) { System.Threading.Thread.Sleep(10000); } System.Diagnostics.Process.Start("shutdown", "-s -t 00"); Hoffe es ist ersichtlich das er solange er die Schleife durchläuft für 10 sek. aussetzt und dann erst neu prüft ob der Prozess läuft. Wenn der Prozess beendet ist soll er Windows runterfahren. Wo ist mein Fehler? Denke die While Bedingung ist falsch oder? Oder bin ich komplett auf dem Holzweg? Gruß René
JasonDelife Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Ich glaube du musst das ".exe" beim Prozessname weglassen. Also nur "vmplayer". Grüße, JasonDelife.
Gateway_man Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Hier so löse ich das in vb.net habs versucht in C# umzuschreiben aber irgendwie beißt sichs noch: System.Diagnostics.Process externprozess = new System.Diagnostics.Process(); externprozess.StartInfo.WorkingDirectory = "Pfad" ; externprozess.StartInfo.FileName = "Filename"; /* wahlweise externprozess.start() sofern er schon läuft wird dies nicht benötigt*/ while (externprozess.HasExited == false) { /* Anweisung */ } //System.Diagnostics.Process.Start("shutdown", "-s -t 00");
René1709 Geschrieben 28. Juli 2009 Autor Geschrieben 28. Juli 2009 Dank euch. Das Problem war wirklich das .exe Das es so einfach war hätte ich glaube ich nie erraten. Wie gesagt. Danke.
JasonDelife Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Nur zur Ergänzung: Windows-Prozesse heißen immer so wie die Datei, aber ohne Endung. Und genau das erwartet GetProcessesByName() auch. @Gateway_man: while(externprozess.HasExited == false) schreibt man besser als: while(!externprozess.HasExited) Grüße, JasonDelife.
Gateway_man Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Nur zur Ergänzung: Windows-Prozesse heißen immer so wie die Datei, aber ohne Endung. Und genau das erwartet GetProcessesByName() auch. Suspekt. Ich lass in meinem Projekt (vb.net) auch öfters Prozesse duch Prozessnamen suchen und benutze immer Dateiname.exe.
JasonDelife Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 (bearbeitet) In der MSDN wird auch kein ".exe" verwendet. Das hat bei mir auch noch nie funktioniert. http://msdn.microsoft.com/de-de/library/z3w4xdc9.aspx Grüße, JasonDelife. Bearbeitet 28. Juli 2009 von JasonDelife Flascher Link
René1709 Geschrieben 28. Juli 2009 Autor Geschrieben 28. Juli 2009 Hab nochmal alles geändert. Hier mal meine Lösung zu meinem Programm. Klappt hervorragend. Vielleicht hilfts ja irgendwann irgendjemandem der auch so wenig ahnung hat wie ich. string x; bool check = true; x = "vmplayer"; System.Threading.Thread.Sleep(240000); while(check == true) { Process[] vmplayer = Process.GetProcessesByName(x); if (vmplayer.Length > 0) { check = true; System.Threading.Thread.Sleep(10000); } else { System.Threading.Thread.Sleep(10000); Process[] vmplayer2 = Process.GetProcessesByName(x); if (vmplayer2.Length == 0) { check = false; } } } System.Diagnostics.Process.Start("shutdown", "-s -t 00"); Nochmal kurz zur Erklärung: Dieses Programm startet beim Systemstart und fängt nach 4 Minuten an den Prozess "vmplayer" zu überwachen. Er prüft alle 10 sekunden ob dieser läuft. Wenn der Prozess nicht mehr läuft prüft er nach 10 sek. nochmal. Sollte der prozess immernoch nicht mehr laufen, wird der PC heruntergefahren. Gibt wahrscheinlich schönere und bessere Lösungen aber ich will ja auch FiSi werden und nicht FiAe Gruß René
0815FIA Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 Hier so löse ich das in vb.net habs versucht in C# umzuschreiben aber irgendwie beißt sichs noch Convert VB.NET to C# - A free code conversion tool - developer Fusion - ASP.NET, C# Programming, VB.NET, .NET Framework, Java and Visual Basic Tutorials
Gateway_man Geschrieben 28. Juli 2009 Geschrieben 28. Juli 2009 (bearbeitet) Convert VB.NET to C# - A free code conversion tool - developer Fusion - ASP.NET, C# Programming, VB.NET, .NET Framework, Java and Visual Basic Tutorials Ist mir bereits bekannt und meines erachtens nicht immer ganz zuverlässig, trotzdem öfters mal hilfreich. Zu deiner Lösung würd ich sagen das es ne Notlösung ist, aber keines falls sehr elegant. Vor allem der Part wo du die länge vergleichst (was mir eh schleierhaft ist, welche länge da gemeint ist, geschweige denn das dies Funktion ein Member der Prozessklasse ist). Gibt ja wie ich oben schon erwähnt hatte, extra in der Prozessklasse ein Member welches hasexited heißt, das exakt dafür hergenommen wird. Aber wenns dir taugt und es funktionert, dann passts ja. ps: Das mit der exe würde mich nicht wundern da, wenn man mal in den taskmanager reinschaut stehn die Prozesse auch mit .exe drin. Bsp.: explorer.exe Mfg Gateway Bearbeitet 28. Juli 2009 von Gateway_man
Guybrush Threepwood Geschrieben 29. Juli 2009 Geschrieben 29. Juli 2009 Vor allem der Part wo du die länge vergleichst (was mir eh schleierhaft ist, welche länge da gemeint ist, die Anzahl der gefunden Prozesse...
René1709 Geschrieben 29. Juli 2009 Autor Geschrieben 29. Juli 2009 Morgen, habe mein Problem doch noch nicht ganz gelöst. Wie lasse ich den shutdown befehl als Admin ausführen? Das Proramm soll ja später auf nem Benutzerkonto laufen ohne adminrechte.
Gateway_man Geschrieben 1. August 2009 Geschrieben 1. August 2009 Geh in deinem Projektmappenexplorer mit rechtsklick auf dein Projekt und wähle die Eingeschaften aus. Dann gehst auf die Kartei Anwendung. Da müsste jetzt neben dem button assemblyinformationen auf ein Button mit "Einstellungen für die Benutzerkontensteuerung" sein. Klick darauf und tausche folgende Zeile aus : <requestedExecutionLevel level="asInvoker" uiAccess="false" /> mit: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> Mfg Simon
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden