為什麽我用Process的時候一直提示“沒有任何應用程式與此操作的指定檔案有關聯。”,
當我把pro.StartInfo.Verb = "shutdown -r";這句注銷掉后,又沒問題,可以正常彈出CMD窗口。?
我代碼如下:
 private void ShutDown(object obj,ElapsedEventArgs e)
        {
           Process pro = new Process();
           pro.StartInfo.FileName = "cmd.exe";
           pro.StartInfo.Verb = "shutdown -r";
           pro.Start();
        }        private void check()
        {
            
            System.Timers.Timer timer = new System.Timers.Timer(5000);
            timer.Elapsed += new ElapsedEventHandler(ShutDown);
            timer.Enabled = true;
            timer.Start();
        }

解决方案 »

  1.   

    Process.Start("cmd.exe","/c   shutdown   -s   -t   0   -f");   
    这样写就可以了..
      

  2.   

    cmd.exe后面不能跟命令(cmd.exe /?).你可以使用start来替换cmd.exeprivate void ShutDown(object obj,ElapsedEventArgs e) 
            { 
              Process pro = new Process(); 
              pro.StartInfo.FileName = "start"; 
              pro.StartInfo.Verb = "shutdown -r"; 
              pro.Start(); 
            }
      

  3.   

    好像都沒用,我試了下。
    有沒有別的辦法,不用Process使得系統關閉或者重啟?
      

  4.   

    系统关闭与操作系统有关,2003会先取到操作权限才能操作
    采用window api可以达到效果。
      

  5.   

    调试通过.
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    System.Diagnostics.Process pro = new System.Diagnostics.Process();
                    pro.StartInfo.FileName = "cmd.exe";
                    pro.StartInfo.Arguments =" /c  shutdown  -s  -t  0  -f";  
                    pro.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                
            }
      

  6.   

    可以了.private void ShutDown(object obj,ElapsedEventArgs e) 

       Process pro = new Process(); 
       pro.StartInfo.FileName = "shutdown.exe"; 
       pro.StartInfo.Arguments = "-r"; 
       pro.Start(); 

      

  7.   

    shutdown.exe -r就是弹出一个窗口, 开始倒数30秒,然后重启.
    你可以把它改为shutdown.exe -p, 不警告和倒数就重启
      

  8.   


    using System;
    using System.Runtime.InteropServices ;namespace offComputer
    {
        /// <summary>
        /// Offcomputer 的摘要说明。
        /// 关闭计算机
        /// </summary>
        public class Offcomputer
        {
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            internal struct TokPriv1Luid
            {
                public int Count;
                public long Luid;
                public int Attr;
            }        [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 Offcomputer()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            public static void ShutDown(int i)    //i=0 ShutDown  i=1 Reboot
            {
                if (i == 0)
                {
                    DoExitWin(EWX_SHUTDOWN + EWX_FORCE);
                }
                else if (i == 1)
                {
                    DoExitWin(EWX_REBOOT + EWX_FORCE);
                }        }
            private static 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);
            }    }
    }
    调用ShutDown(0);  //关机
    ShutDown(1);  //重启