Pomoci tohoto kodu muzete resetovat jak mistni PC, tak i vzdaleny. Tak jako pri vsech se neobejdeme bez tridy ManagementClass, ktera obstarava komunikaci s podsystemem WMI, ze ktere se ziska objekt ManagementObjectCollection, jehoz prvni prvek je WMI “Wrapper”. Pak jiz staci jen vyvolat pres invoke na ziskanem objektu metodu Reboot nebo Shutdown, ktere se predavaji jako retezce. Pokud se chcete toto rozhrani naucit podrobneji, doporucuji MSDN dokumentaci. Tridy jako ManagementScope jsou v System.Management.dll.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
using sunamo.System; using System; using System.Management; using System.Windows.Forms; namespace sunamo.System { public class SystemUtils { public static void ShutdownSystem(string hostName, string remoteAuthUser, string remoteAuthPassword, bool reboot) { // Neni-li zadano jmeno hostitele, nastavime localhost if (hostName == null || hostName == "") { hostName = "localhost"; } // Vytvoreni objektu typu ManagementScope, s nimz se nastavi vlastnost // EnablePrivileges a predaji se autentizacni informace ManagementScope scope = new ManagementScope(@"" + hostName + "rootcimv2"); scope.Options.EnablePrivileges = true; scope.Options.Username = remoteAuthUser; scope.Options.Password = remoteAuthPassword; // Zjisteni instance typu Win32_OperatingSystem pro aktivni opercni system ManagementClass mc = new ManagementClass(scope, new ManagementPath( "Win32_OperatingSystem"), new ObjectGetOptions()); ManagementObjectCollection moc = mc.GetInstances(); ManagementObjectCollection.ManagementObjectEnumerator mocEnumerator = moc.GetEnumerator(); mocEnumerator.MoveNext(); ManagementObject mo = (ManagementObject)mocEnumerator.Current; // Pocitac sestrelime nebo znovuspustime pomoci metody Win32Shutdown if (reboot) { mo.InvokeMethod("Reboot", null); } else { mo.InvokeMethod("Shutdown", null); } // Uvolnime objekty WMI, aby se co nejdrive ulevilo operacni pameti mo.Dispose(); moc.Dispose(); mc.Dispose(); } } } namespace Restart_Windows { class Program { [STAThread] static void Main(string[] args) { Console.Title = "Ukonceni a nove spusteni Windows"; // Jmeno hostitele a autentizacni informace // Autentizacni informace se pouziji pouze pro // vzdaleny pristup. Lokalni pristup // probehne vzdy pod uctem aktualniho procesu. string hostName = "localhost"; string authUser = null; string authPassword = null; /* Sestreleni a novy start pocitace */ try { switch (MessageBox.Show(hostName + ": Chcete ukoncit operacni system (Ano) nebo ho restartovat (Ne)?", Application.ProductName, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Yes: SystemUtils.ShutdownSystem(hostName, authUser, authPassword, false); break; case DialogResult.No: SystemUtils.ShutdownSystem(hostName, authUser, authPassword, true); break; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } |