我想做一个关闭魔兽war3进程的程序,但是用一下代码关闭不了,谁知道为什么啊?
Process[] ps = Process.GetProcesses();
foreach (Process item in ps)
{
    if (item.ProcessName=="war3")
    {
        item.Kill();
    }
}
搜索了下,也有人问过,但是他直接就是已经解决了。

解决方案 »

  1.   

    war3.exe
    后面有没有exe呢
      

  2.   

    加了EXE照样没关闭,能试的我都试了。
      

  3.   

    我试了一下  可以把程序关闭  进程确实没有exe
    可能问题出在你的进程名上   看看war3写的对不对  注意这里是区分大小写的
      

  4.   


    我知道你用的是小写
    但是
    item.ProcessName这条取出来的进程名
    可能是大写
    也可能是大小写混合
      

  5.   

    普通的进程,比如QQ和YY都可以关闭,不过听说好像魔兽是加密的,需要先设置程序为最高等级才能关闭进程,而且这句是不用加入.exe的,谁有魔兽争霸War3的可不可以帮忙下啊?感谢了
      

  6.   

    这个是看过的一个帖子,但是看着有点乱,
    http://topic.csdn.net/u/20120131/19/d5e0995f-4f38-4373-be19-3e3b0f1ce4a2.html
      

  7.   

    对了,。C#中究竟有没有pkill这个类?怎么百度都没有,但是这位外星哥么调用了,而且传说还成功了,
      

  8.   

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }        [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, int 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 processName)
            {
                IntPtr killer;            try
                {
                    Process[] ps = Process.GetProcesses();                foreach (Process p in ps)
                    {
                        if (p.ProcessName.Equals(processName, StringComparison.CurrentCultureIgnoreCase))
                        {
                            killer = OpenProcess(ProcessAccessFlags.All, false, p.Id);
                            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));
                }
            }
        }
    }调用:KillProcess("war3");