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