We help IT Professionals succeed at work.

Shutdown Computing

ttnhatan asked
In window, if i use a command: "shutdown -t 00 -s" then it will shutdown my computer.

Now, I want to use that command into C# program, How to?
Or have any another way to replace?

Watch Question

Try this out ...
Process.Start("shutdown", "-t 00 -s");
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

namespace TestShutDown

        [StructLayout(LayoutKind.Sequential, Pack=1)]
        internal struct TokPriv1Luid
        public int Count;
        public long Luid;
        public int Attr;
  public partial class Form1 : Form
        [DllImport("kernel32.dll", ExactSpelling=true) ]
        internal static extern IntPtr GetCurrentProcess();

        [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
        internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok );

        [DllImport("advapi32.dll", SetLastError=true) ]
        internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid );

        [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
        internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall,
        ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen );

        [DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ]
        internal static extern bool ExitWindowsEx( int flg, int rea );

        internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
        internal const int TOKEN_QUERY = 0x00000008;
        internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
        internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
        internal const int EWX_LOGOFF = 0x00000000;
        internal const int EWX_SHUTDOWN = 0x00000001;
        internal const int EWX_REBOOT = 0x00000002;
        internal const int EWX_FORCE = 0x00000004;
        internal const int EWX_POWEROFF = 0x00000008;
        internal const int EWX_FORCEIFHUNG = 0x00000010;

        public Form1()
      private void DoExitWin(int flg)
          bool ok;
          TokPriv1Luid tp;
          IntPtr hproc = GetCurrentProcess();
          IntPtr htok = IntPtr.Zero;
          ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
          tp.Count = 1;
          tp.Luid = 0;
          tp.Attr = SE_PRIVILEGE_ENABLED;
          ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
          ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
          ok = ExitWindowsEx(flg, 0);

        private void button1_Click(object sender, EventArgs e)