读书人

c#进程控制有关问题

发布时间: 2012-03-07 09:13:51 作者: rapoo

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));            }        } 

读书人网 >C#

热点推荐