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
Versuch mal:
var processes = from p in Process.GetProcesses() where p.MainWindowTitle.Length > 0 select p;
Mfg
Aratar
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
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.
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
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
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
Du könntest dir mal
taskkill.exe
anschauen - damit ist dann wirklich Schluss 😉
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)
Viele Grüße
Hotte