You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中打开CMD窗口并通过进程ID终止进程?

问题分析与解决

嘿,我一眼就瞅出你代码里的问题了!你遇到的System.FormatException完全是因为string.Format方法的参数传递姿势不对导致的。

看你这段出问题的代码:

process.StandardInput.WriteLine(string.Format("taskkill /I {0} /F"), processID);

这里的坑在于括号位置——你把processID放在了string.Format()方法的括号外面!这就导致Format方法只拿到了带占位符{0}的字符串,却没收到对应的参数值。当方法想找{0}对应的参数时,发现参数列表是空的,可不就抛出"索引必须大于等于0且小于参数列表大小"的异常嘛。

修正后的完整代码

只需要把processID挪到string.Format的参数列表里就行:

string processID = ID_numbers.Text;
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();
// 这里修正了Format的参数位置
process.StandardInput.WriteLine(string.Format("taskkill /I {0} /F", processID));
process.StandardInput.Flush();
process.StandardInput.Close();
process.WaitForExit();

更简洁的写法(可选)

要是你用的是C# 6及以上版本,还可以用字符串插值代替string.Format,代码读起来更清爽:

process.StandardInput.WriteLine($"taskkill /I {processID} /F");

这么一改,占位符就能正确匹配到processID的值,那个烦人的异常也就消失啦。

内容的提问来源于stack exchange,提问作者Evilshig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:24:59