Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Shutdown: Windows und alle Prozesse ohne "Ungesicherte Daten speichern?"-Dialoge herunterfahren
seek
myCSharp.de - Member



Dabei seit:
Beiträge: 22
Herkunft: Össi

Themenstarter:

Shutdown: Windows und alle Prozesse ohne "Ungesicherte Daten speichern?"-Dialoge herunterfahren

beantworten | zitieren | melden

Hallo,

ich erstelle in WPF ein kleines Shutdown Gadget und bin jedoch auf folgendes Problem gestoßen:
Shutdown wird ausgeführt jedoch wenn etwas offen ist wie Word wird dieser verhindert. Es geht dann das typische Windows 7 Fenster auf wo man das "Herunterfahren erzwingen" kann.

Dieses Problem wollte ich umgehen indem ich alle Prozesse vorher mit

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
in einem Array lade und dann jedes einzelne beende. Jedoch löst das bei Windows 7 ein Bluescreen aus – denke es wird irgendein wichtiger System Prozess beendet. Hab leider im Netz nicht finden können wie man nur die Prozesse öffnet die im Taskmanager in der ersten Registerkarte "Anwendungen" zu finden sind.

Dort sind meistens nur diese die nach dem Hochfahren gestartet wurden z.B: Word, Notepad, Windows Mediaplayer etz. Durch das Beenden dieser Speziellen Programme würde auch kein System Prozess beendet und es gäbe auch kein Bluescreen.

Eine Alternative wäre es wenn das Programm automatisch den Button "Herunterfahren erzwingen" betätigen könnte. Hab dazu auch nix gefunden ohne die Maus speziell wo klicken zu lassen. Und den Prozess finden übernehmen und das Button bestätigen ist für so ein Gadget auch zu viel des guten bzw. auch nicht sehr effizient.

Hoffe mir kann wer weiterhelfen ?(


mfg
Seek
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

Versuch mal:


var processes = from p in Process.GetProcesses() where p.MainWindowTitle.Length > 0 select p;

Mfg
Aratar
private Nachricht | Beiträge des Benutzers
seek
myCSharp.de - Member



Dabei seit:
Beiträge: 22
Herkunft: Össi

Themenstarter:

beantworten | zitieren | melden

Danke Aratar,

hat super funktioniert kein Bluescreen mehr

Bin aber leider wieder bei meinem alten Problem. Wenn ich Word mit

if (!(processChild.MainWindowTitle.Equals(this.Text)) && processChild.MainWindowTitle.Length > 0)
{
	processChild.Kill();
}
beende dann fragt Word immer noch nach ob das Dokument abgespeichert werden soll. Das Program wird leider nicht beendet.

Gibt es da was Besseres wenn man übern Taskmanager den Prozess Winword.exe direkt beendet dann fragt er nicht mehr nach. Dachte das macht das Kill() auch?

mfg
Seek
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von seek
beende dann fragt Word immer noch nach ob das Dokument abgespeichert werden soll. Das Program wird leider nicht beendet.
Das ist doch auch gut so - wenn der User noch ungespeicherte Änderungen hat, möchte er diese im Normalfall auch nicht verlieren.
private Nachricht | Beiträge des Benutzers
seek
myCSharp.de - Member



Dabei seit:
Beiträge: 22
Herkunft: Össi

Themenstarter:

beantworten | zitieren | melden

Danke winSharp63 ich weiß das die ein Schutz eingebaut haben und auch wofür der gut ist
Ich möchte aber das alles verloren geht wenn das Gadget Windows runterfährt. Wenn ich das nicht wollen würde, würde ich nicht extra hier nachfragen

Also weiß wer wie man per c# Code ein Programm beenden kann so wie als würde man dieses über den Taskmanager beenden? Wenn man WinWord.exe über den Taskmanager beendet umgeht das diesen Schutzmechanismus.

Danke.


mfg
Seek
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Auch wenn mir jetzt nichts einfällt, wo soetwas nützlich ist, kann man den parameter -f (force) als Parameter an den shoutdown befehl anhängen
private Nachricht | Beiträge des Benutzers
seek
myCSharp.de - Member



Dabei seit:
Beiträge: 22
Herkunft: Össi

Themenstarter:

beantworten | zitieren | melden

Habe das mit Shutdown schon versucht gleiches Problem, habe deshalb ne Programm interne Shutdown Funktion von Codeguru übernommen.

Ich brauche das weil ich am Abend übern Laptop immer Video schaue (VGA auf Fernseher) und wir schlafen manchmal ein :). Weil shutdown -t (ZeitinSekunden) -f auch nicht funktioniert will ich etwas das alles beendet und den PC herunterfahrt. Mir egal ob noch was offen ist - Pech gehabt ^^

mfg,
seek
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Du könntest dir mal
taskkill.exe
anschauen - damit ist dann wirklich Schluss
private Nachricht | Beiträge des Benutzers
Hotte
myCSharp.de - Member



Dabei seit:
Beiträge: 32

beantworten | zitieren | melden

Servus,

womit es gehen müsste ist die WMI. Da gibt es extra einen Parameter zum erzwingen des Neustarts.
option explicit

if msgbox("Do you want to shut down this computer?", 4, "System Shutdown") = 6 then
	dim osObj, osColl 
	const nLogOff=0 
	const nReboot=2 
	const nForceLogOff=4 
	const nForceReboot=6 
	const nPowerDown=8 
	const nForcePowerDown=12 

	Set osColl = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") 

	For Each osObj in osColl
	    osObj.Win32Shutdown(nForcePowerDown)
	Next
else
	msgBox "Shutdown cancelled",vbOKOnly+vbInformation,"System Shutdown"
end if
Das Beispiel lässt sich natürlich auch in C# übertragen.
Win32_OperatingSystem gibt es, wenn du mal einen Blick riskierst, auch eine Methode zum angeben eines Grundes. (Windows Server)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Hotte am .
Viele Grüße

Hotte
private Nachricht | Beiträge des Benutzers