现在的位置: 首页 > 综合 > 正文

强制重启

2013年12月09日 ⁄ 综合 ⁄ 共 2891字 ⁄ 字号 评论关闭
C# code
//点击Button1,强制重启 //C#重启服务器代码 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Runtime.InteropServices; namespace WebApplication1_advapi { /**//// <summary> /// WebForm1 的摘要说明。 /// </summary> public class WebForm1 : 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 System.Web.UI.WebControls.Button Button1; 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) { // 在此处放置用户代码以初始化页面 } Web 窗体设计器生成的代码#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); } } }

上面的代码经过了测试,注意在web.config要administrator的权限 

抱歉!评论已关闭.