在Default.aspx中加一控件Button1
将Default.aspx.cs代码替换为以下代码
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Runtime.InteropServices; public partial class _Default : System.Web.UI.Page { protected const int SE_PRIVILEGE_ENABLED = 0x2; protected const int TOKEN_QUERY = 0x8; protected const int TOKEN_ADJUST_PRIVILEGES = 0x20; protected const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; protected const int EWX_LOGOFF = 0x0; protected const int EWX_SHUTDOWN = 0x1; protected const int EWX_REBOOT = 0x2; protected const int EWX_FORCE = 0x4; protected const int EWX_POWEROFF = 0x8; protected const int EWX_FORCEIFHUNG = 0x10; [StructLayout(LayoutKind.Sequential, Pack = 1)] protected struct LuidStruct { public int Count; public long Luid; public int Attr; } [DllImport("kernel32.dll", ExactSpelling = true)] protected static extern IntPtr GetCurrentProcess(); [DllImport("advapi32.dll", SetLastError = true)] protected static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok); [DllImport("advapi32.dll", SetLastError = true)] protected static extern bool LookupPrivilegeValue(string host, string name, ref long pluid); [DllImport("advapi32.dll", SetLastError = true, ExactSpelling = true)] protected static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref LuidStruct newst, int len, IntPtr prev, IntPtr relen); [DllImport("user32.dll", SetLastError = true, ExactSpelling = true)] protected static extern bool ExitWindowsEx(int flg, int rea); protected static void DoExitWindows(int flg) { LuidStruct tp; IntPtr hproc = GetCurrentProcess(); IntPtr htok = IntPtr.Zero; OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok); tp.Count = 1; tp.Luid = 0; tp.Attr = SE_PRIVILEGE_ENABLED; LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid); AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero); ExitWindowsEx(flg, 0); } //关机 public static void Shutdown() { DoExitWindows(EWX_SHUTDOWN); } //重启 public static void Reboot() { DoExitWindows(EWX_REBOOT | EWX_FORCE); } //注销 public static void Logoff() { DoExitWindows(EWX_LOGOFF); } [DllImport("advapi32.dll", SetLastError = true, ExactSpelling = false)] protected static extern bool InitiateSystemShutdown(string name, string msg, int timeout, bool force, bool reboot); private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**/ /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { // //InitiateSystemShutdown(null, null, 0, true, true); Shutdown();//关机 // Reboot();//重启 // Logoff();//注销 } }