C# 自动关机代码为什么不能正常关机
先引用空间using   System.Runtime.InteropServices   ; 
 再申明 
 [   DllImport( "user32 ")   ] 
 public   static   extern   long   ExitWindowsEx(long   uFlags,   long   dwReserved   )   ;   
 定义常量 
 long   dwReserved   ; 
 const   int   SHUTDOWN   =   1   ; 
 const   int   REBOOT   =   2   ; 
 long   sh   ;  	 
 关机时调用sh=ExitWindowsEx(SHUTDOWN,   dwReserved)可怎么也关不了机..根本没有反应..谁帮我一下是什么原因??应该没有错了... 
------解决方案--------------------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( "正在关机…… "); 
          // 修改 EWX_SHUTDOWN 或者 EWX_LOGOFF, EWX_REBOOT等实现不同得功能。 
          // 在XP下可以看到帮助信息,以得到不同得参数 
          // SHUTDOWN /? 
          DoExitWin(EWX_SHUTDOWN); 
       } 
 }   
 直接用吧 
 果真女子的话,加我MSN慢慢聊哈哈
------解决方案--------------------用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c  "co  
 mment "] [-d up:xx:yy]    
 没有参数 显示此消息(与 ? 相同)  
 -i 显示 GUI 界面,必须是第一个选项  
 -l 注销(不能与选项 -m 一起使用)  
 -s 关闭此计算机  
 -r 关闭并重启动此计算机  
 -a 放弃系统关机  
 -m \\computername 远程计算机关机/重启动/放弃  
 -t xx 设置关闭的超时为 xx 秒  
 -c  "comment " 关闭注释(最大 127 个字符)  
 -f 强制运行的应用程序关闭而没有警告