独上高楼网站
  •    你所在位置:首页 VS.netC#C#编程〉利用网页强制重启服务器(C#)
  • 利用网页强制重启服务器(C#)
  • 作者:佚名  文章来源:www.knowsky.com  发布日期:2008-07-04  浏览次数:188
  • 打印这篇文章
  • 点击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
    {
        /**////


        /// WebForm1 的摘要说明。
        ///

        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);
            }
           
            /**////


            /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            /// 此方法的内容。
            ///

            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);
            }
        }
    }
     

  • 打印这篇文章
  • 与本文主题相关的文章
  • 返回首页