在WindowsForm程序中,在函数调用中有如下:
ExitWindowsEx(1,0);
而且已经有[DllImport("user32.dll")];
          pricate static extern ExWindowsEx(int x,int y);
为什么在程序运行后,不能关机呢?
而且是在Release的Bin文件夹下直接执行。

解决方案 »

  1.   

    直接用系统的就可以了。。
    Process.Start("shutdown.exe", " -s -t 60");
      

  2.   


    //也试过很多种,发现这个类可以,winxp,win2003都可以关机public class EnvironmentCheckClass
        {
            [DllImport("user32.dll")]
            static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason);
            [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);
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            internal struct TokPriv1Luid
            {
                public int Count;
                public long Luid;
                public int Attr;
            }        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";        public enum ExitWindows : uint
            {
                LogOff = 0x00,      //注销
                ShutDown = 0x01,    //关机
                Reboot = 0x00000002,      //重启
                Force = 0x04,
                PowerOff = 0x08,
                ForceIfHung = 0x10
            }
            public enum ShutdownReason : uint
            {
                MajorApplication = 0x00040000,
                MajorHardware = 0x00010000,
                MajorLegacyApi = 0x00070000,
                MajorOperatingSystem = 0x00020000,
                MajorOther = 0x00000000,
                MajorPower = 0x00060000,
                MajorSoftware = 0x00030000,
                MajorSystem = 0x00050000,
                MinorBlueScreen = 0x0000000F,
                MinorCordUnplugged = 0x0000000b,
                MinorDisk = 0x00000007,
                MinorEnvironment = 0x0000000c,
                MinorHardwareDriver = 0x0000000d,
                MinorHotfix = 0x00000011,
                MinorHung = 0x00000005,
                MinorInstallation = 0x00000002,
                MinorMaintenance = 0x00000001,
                MinorMMC = 0x00000019,
                MinorNetworkConnectivity = 0x00000014,
                MinorNetworkCard = 0x00000009,
                MinorOther = 0x00000000,
                MinorOtherDriver = 0x0000000e,
                MinorPowerSupply = 0x0000000a,
                MinorProcessor = 0x00000008,
                MinorReconfig = 0x00000004,
                MinorSecurity = 0x00000013,
                MinorSecurityFix = 0x00000012,
                MinorSecurityFixUninstall = 0x00000018,
                MinorServicePack = 0x00000010,
                MinorServicePackUninstall = 0x00000016,
                MinorTermSrv = 0x00000020,
                MinorUnstable = 0x00000006,
                MinorUpgrade = 0x00000003,
                MinorWMI = 0x00000015,
                FlagUserDefined = 0x40000000,
                FlagPlanned = 0x80000000
            }        public void ReStartComputer()
            {
                System.Threading.Thread Restart = new System.Threading.Thread(ReSart);
                Restart.Start();
            }        private void ReSart()
            {
                try
                {
                    System.Threading.Thread.Sleep(1000);
                    //2
                    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(ExitWindows.Reboot, ShutdownReason.MinorOther);
                }
                catch
                { }
            }        public void ComputerPowerOff()
            {
                System.Threading.Thread PowerOff = new System.Threading.Thread(PCPowerOff);
                PowerOff.Start();
            }        private void PCPowerOff()
            {
                try
                {
                    System.Threading.Thread.Sleep(1000);
                    //2
                    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(ExitWindows.PowerOff, ShutdownReason.MajorHardware);
                }
                catch
                { }
            }
        }
      

  3.   

    http://topic.csdn.net/u/20100311/19/A908A412-056C-46B1-BEDB-4379FFE83EA4.htmlhttp://topic.csdn.net/u/20100423/21/0B7B0EFF-D3B0-4BDF-ABE1-580BF90C97D8.html
      

  4.   

    http://topic.csdn.net/u/20100423/21/0b7b0eff-d3b0-4bdf-abe1-580bf90c97d8.html