首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#进程控制有关问题

2012-03-07 
c#进程控制问题private void button1_Click(object sender, EventArgs e){Process[] p Process.GetProce

c#进程控制问题
private void button1_Click(object sender, EventArgs e)
  {
  Process[] p = Process.GetProcessesByName("War3");
  p[0].Kill();
  }

其他的进程都可以关闭,魔兽3的进程失败,求大大解释!

[解决办法]
用这个方法关闭,100%成功,你的那个是要进程正常退出,因此失败。

C# code
        [Flags]        public enum ProcessAccessFlags : uint        {            All = 0x001F0FFF,            Terminate = 0x00000001,            CreateThread = 0x00000002,            VMOperation = 0x00000008,            VMRead = 0x00000010,            VMWrite = 0x00000020,            DupHandle = 0x00000040,            SetInformation = 0x00000200,            QueryInformation = 0x00000400,            Synchronize = 0x00100000        }        [DllImport("kernel32.dll")]        static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId);        [DllImport("kernel32.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);        [DllImport("kernel32.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        static extern bool GetExitCodeProcess(IntPtr hProcess, out uint lpExitCode);        private void KillProcess(string processId,string processName)        {            IntPtr killer;            try            {                killer = OpenProcess(ProcessAccessFlags.All, false, uint.Parse(processId));                MessageBox.Show(killer.ToString());                uint exitcode = 0;                bool ret = GetExitCodeProcess(killer, out exitcode);                ret = TerminateProcess(killer, exitcode);                if (ret)                    MessageBox.Show(string.Format("成功关闭程序{0}。", processName));                else                {                    exitcode = 0;                    MessageBox.Show(string.Format("杀死进程{0}时失败,原因不明。", processName));                }            }            catch (Exception Exc)            {                MessageBox.Show(string.Format("杀死进程{0}时失败,原因是{1}。", processName, Exc.Message));            }        } 

热点排行