Teplý reset OS Windows

Pomocí tohoto kódu můžete resetovat jak místní PC, tak i vzdálený. Tak jako při všech se neobejdeme bez třídy ManagementClass, která obstarává komunikaci s podsystémem WMI, ze které se získá objekt ManagementObjectCollection, jehož první prvek je WMI „Wrapper“. Pak již stačí jen vyvolat přes invoke na získaném objektu metodu Reboot nebo Shutdown, které se předávají jako řetězce. Pokud se chcete toto rozhraní naučit podrobněji, doporučuji MSDN dokumentaci. Třídy jako ManagementScope jsou v System.Management.dll.

C#
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);
            }
        }
    }
}

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *