停止隐藏的cmd脚本

时间:2018-04-11 09:23:30

标签: c# cmd

我以隐藏模式启动cmd文件(ftpCmdPath)。

System.Diagnostics.Process processCmd = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = ftpCmdPath;
    processCmd.StartInfo = startInfo;
    processCmd.Start();

之后我尝试用下一个逻辑停止它:

foreach (Process p in Process.GetProcessesByName("cmd"))
{
p.CloseMainWindow();
}

我也尝试过:

p.Kill();
p.Close();

当我以不同于Hidden的模式启动相同的cmd脚本时,一切正常,但隐藏进程始终保持工作。我看到调试器仍然调用了这个过程" cmd"但是当我试图关闭它时没有任何反应。

1 个答案:

答案 0 :(得分:0)

您应该使用自定义方法列出将cmd作为父进程

的所有进程

您需要先添加System.Management引用。

然后简单地杀死进程树:

void Main()
        {

        var psi = new ProcessStartInfo("cmd.exe", "/c notepad");
        var cmdProcess = Process.Start(psi);
        Thread.Sleep(2000);
        KillProcessAndChildren(cmdProcess.Id);

    }

    public void KillProcessAndChildren(int pid)
    {
    using (var searcher = new ManagementObjectSearcher
        ("Select * From Win32_Process Where ParentProcessID=" + pid))
    {
        var moc = searcher.Get();
        foreach (ManagementObject mo in moc)
        {
            KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
        }
        try
        {
            var proc = Process.GetProcessById(pid);
            proc.Kill();
        }
        catch (Exception e)
        {
            // Process already exited.
        }
    }
    }