C#在网页中关闭重启服务

在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();//注销

    }
   
}
原文地址:https://www.cnblogs.com/yangbin1005/p/1419826.html