我正在尝试制作程序。将找到程序的PID号。 到目前为止,我已经可以使用记事本了。
代码:
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/C for /f \"tokens=1,2\" %a in " + "('Tasklist /fi \"imagename eq notepad.exe\" /nh') do @echo %b",
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
它不会只是用于测试目的的记事本。 我希望它是站立在那里的字符串,而不是记事本。
喜欢
String myProgram = @"[insert program name]";
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/C for /f \"tokens=1,2\" %a in " + "('Tasklist /fi \"imagename eq MyProgram\" /nh') do @echo %b",
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
我不知道如何将其从文本“记事本”更改为我的字符串。
答案 0 :(得分:2)
也许可以用吗?
Arguments = string.Format("/C for /f \"tokens=1,2\" %a in " + "('Tasklist /fi \"imagename eq {0}\" /nh') do @echo %b",myProgram ),
答案 1 :(得分:2)
这将为您提供所有正在运行的记事本实例的PID:
foreach (var notepad in Process.GetProcessesByName("notepad"))
{
Console.WriteLine(notepad.Id);
}
不需要启动批处理处理器并弄弄它的参数。
答案 2 :(得分:1)
最简单的方法是使用字符串。格式简写:
string myProgram = @"[insert program name]";
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = $"/C for /f \"tokens=1,2\" %a in ('Tasklist /fi \"imagename eq {myProgram}\" /nh') do @echo %b",
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
编辑:根据Ian的建议,$
的{{1}}速记运算符仅在C#6中可用。这不适用于早期版本。