Madz Posted May 12, 2003 Posted May 12, 2003 Is there any way to SHUTDOWN or RESTART computer with .NET framework I dont want to use API. Quote The one and only Dr. Madz eee-m@il
wyrd Posted May 12, 2003 Posted May 12, 2003 To my knowledge you'd have to use the Windows API. Quote Gamer extraordinaire. Programmer wannabe.
Madz Posted May 12, 2003 Author Posted May 12, 2003 Dear I have used Win32 API but its not working under XP in Windows XP it only logoff PC , no restart no shutdown In XP i did this to restart PC Shell("SHUTDOWN -R") I was just asking about it, rather .NET Framework have any functions some thing like this Quote The one and only Dr. Madz eee-m@il
*Gurus* divil Posted May 12, 2003 *Gurus* Posted May 12, 2003 There is no .NET method to do that. You should use the ExitWindowsEx API instead. Quote MVP, Visual Developer - .NET Now you see why evil will always triumph - because good is dumb. My free .NET Windows Forms Controls and Articles
Madz Posted May 12, 2003 Author Posted May 12, 2003 But ExitWindowsEx reaise an error when i try to call this method with this ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0) if i type this code as ExitWindowsEx([color=red]EWX_SHUTDOWN[/color], 0) then there is no problem with other windows but windos XP do not shutdown. It cause an error if i try to give it more then 1 flags. Quote The one and only Dr. Madz eee-m@il
*Gurus* divil Posted May 12, 2003 *Gurus* Posted May 12, 2003 What error? Are the flags declared? It looks like that should work to me. Quote MVP, Visual Developer - .NET Now you see why evil will always triumph - because good is dumb. My free .NET Windows Forms Controls and Articles
*Gurus* Derek Stone Posted May 12, 2003 *Gurus* Posted May 12, 2003 You'll want to use "Or" instead of the pipe symbol. Add to that the fact that it takes a lot more to shutdown a Windows NT based system than a simple call to ExitWindowsEx. You'll need to acquire the proper security permissions beforehand. Quote Posting Guidelines
Cimperiali Posted October 3, 2003 Posted October 3, 2003 Found this with google http://www.visualcsharp.it/Sorgenti/Shutdown/Shutdown.asp Coments are in italian, but code is clear... using System; using System.Runtime.InteropServices; class shoutdown{ [structLayout(LayoutKind.Sequential, Pack=1)] internal struct TokPriv1Luid { public int Count; public long Luid; public int Attr; } [DllImport("kernel32.dll", ExactSpelling=true) ] internal static extern IntPtr GetCurrentProcess(); [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ] internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok ); [DllImport("advapi32.dll", SetLastError=true) ] internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid ); [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ] internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen ); [DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ] internal static extern bool ExitWindowsEx( int flg, int rea ); internal const int SE_PRIVILEGE_ENABLED = 0x00000002; internal const int TOKEN_QUERY = 0x00000008; internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020; internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; internal const int EWX_LOGOFF = 0x00000000; internal const int EWX_SHUTDOWN = 0x00000001; internal const int EWX_REBOOT = 0x00000002; internal const int EWX_FORCE = 0x00000004; internal const int EWX_POWEROFF = 0x00000008; internal const int EWX_FORCEIFHUNG = 0x00000010; private static void DoExitWin(int flg) { bool ok; TokPriv1Luid tp; IntPtr hproc = GetCurrentProcess(); IntPtr htok = IntPtr.Zero; ok = OpenProcessToken( hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok ); tp.Count = 1; tp.Luid = 0; tp.Attr = SE_PRIVILEGE_ENABLED; ok = LookupPrivilegeValue( null, SE_SHUTDOWN_NAME, ref tp.Luid ); ok = AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero ); ok = ExitWindowsEx( flg, 0 ); } public static void Main() { Console.WriteLine("Sto per spegnere il computer..."); //Modificare EWX_SHUTDOWN con EWX_LOGOFF, EWX_REBOOT, ecc, ecc... DoExitWin(EWX_SHUTDOWN); } } Quote
Recommended Posts