ASP.NET关机代码(Windows为本机)
创始人
2024-04-21 16:11:31
0

编写.NET关机代码,首先导入这个命名空间using System.Runtime.InteropServices;

这个是关闭本机的代码,比如说程序是放在服务器上,那么关闭的是Server,而不是客户端。

以下.NET关机代码针对windows

  1. using System;    
  2. using System.Data;    
  3. using System.Configuration;    
  4. using System.Web;    
  5. using System.Web.Security;    
  6. using System.Web.UI;    
  7. using System.Web.UI.WebControls;    
  8. using System.Web.UI.WebControls.WebParts;    
  9. using System.Web.UI.HtmlControls;    
  10. using System.Runtime.InteropServices;    
  11.  
  12. public partial class _Default : System.Web.UI.Page     
  13.  
  14. {    
  15.     protected void Page_Load(object sender, EventArgs e)    
  16.     {    
  17.         DoExitWin(EWX_SHUTDOWN);    
  18.     }    
  19.     [StructLayout(LayoutKind.Sequential, Pack = 1)]    
  20.     internal struct TokPriv1Luid    
  21.     {    
  22.         public int Count;    
  23.         public long Luid;    
  24.         public int Attr;    
  25.     }    
  26.    
  27. [DllImport("kernel32.dll", ExactSpelling = true)]    
  28.    internal static extern IntPtr GetCurrentProcess();    
  29.    
  30.    [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]    
  31.    internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);    
  32.    
  33.    [DllImport("advapi32.dll", SetLastError = true)]    
  34.    internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);    
  35.    
  36.    [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]    
  37.    internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,    
  38.    ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);    
  39.    
  40.    [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]    
  41.    internal static extern bool ExitWindowsEx(int flg, int rea);    
  42.  
  43. internal const int SE_PRIVILEGE_ENABLED = 0x00000002;    
  44.    internal const int TOKEN_QUERY = 0x00000008;    
  45.    internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;    
  46.    internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";    
  47.    internal const int EWX_LOGOFF = 0x00000000;    
  48.    internal const int EWX_SHUTDOWN = 0x00000001;    
  49.    internal const int EWX_REBOOT = 0x00000002;    
  50.    internal const int EWX_FORCE = 0x00000004;    
  51.    internal const int EWX_POWEROFF = 0x00000008;    
  52.    internal const int EWX_FORCEIFHUNG = 0x00000010;    
  53.  
  54. private static void DoExitWin(int flg)    
  55.     {    
  56.         bool ok;    
  57.         TokPriv1Luid tp;    
  58.         IntPtr hproc = GetCurrentProcess();    
  59.         IntPtr htok = IntPtr.Zero;    
  60.         ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);    
  61.         tp.Count = 1;    
  62.         tp.Luid = 0;    
  63.         tp.Attr = SE_PRIVILEGE_ENABLED;    
  64.         ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);    
  65.         ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);    
  66.         ok = ExitWindowsEx(flg, 0);    
  67.     }    
  68. }    
  69.  

以上就是.NET关机代码。

【编辑推荐】

  1. ASP.NET DetailsView中显示选中产品的详细信息
  2. ASP.NET 2.0数据教程:GridView选择行
  3. ASP.NET 2.0数据教程:GridView显示数据
  4. ASP.NET 2.0中添加GridView到页面
  5. 新增ASP.NET页面时的注意事项

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...