启动后获取Process的友好名称
我正在为嵌入式系统编写监视服务,监视某些专有进程并在必要时重新启动它们。 (在你问之前,与恶意软件无关。这只是一个业务要求)
我需要从刚刚创建的进程中检索友好名称 ,以便稍后我可以使用该名称检索该进程以监视其运行状况。
我的问题如下:
这是一段代码:
var startInfo = new ProcessStartInfo { FileName = "notepad.exe" }; var process = new Process(); process.StartInfo = startInfo; process.Start(); process.WaitForInputIdle(); var friendlyName = process.ProcessName;
例如,如果正在启动的进程是Firefox,则会在最后一行抛出InvalidOperationException
。
那我该怎么办呢? 有更安全的方法吗?
编辑:添加了一个代码片段以便澄清。 EDIT2:改写整个问题以澄清,留下无关紧要的东西。
好吧,经过大量的研究后,我不得不求助于一个有点hacky的解决方案。
根据Process.GetProcessesByName()文档,“ 进程名称是进程的友好名称,例如Outlook,不包括.exe扩展名或路径。 ”。
考虑到这一点,我使用此代码解决了这个问题:
var startInfo = new ProcessStartInfo { FileName = "notepad.exe" }; var process = new Process(); process.StartInfo = startInfo; process.Start(); var friendlyName = Path.GetFileNameWithoutExtension(startInfo.FileName);
正如我所说,它仍然感觉有点hacky,但至少它完成了工作,让我继续前进。
非常感谢您的所有评论!
你错过了代码中的一些关键内容,并尝试使用NotePad.exe
这样的东西,你会看到我在说什么
var startInfo = new ProcessStartInfo { FileName = "notepad.exe" }; var process = new Process(); process.StartInfo = startInfo; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = false; process.Start(); process.WaitForInputIdle(); // this line below will always be false because `process.ProcessName will be //notepad and process.StartInfo.FileName = notepade.exe if (process.ProcessName.Equals(process.StartInfo.FileName) == false) { var theConfiguredProcessName = process.ProcessName; }
另外一个选项你可以做以下两件事之一
Process[] processName = Process.GetProcessesByName("blah.exe");
或检查所有正在运行的进程并检查您的运行进程
上述就是C#学习教程:启动后获取Process的友好名称分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Process[] processlist = Process.GetProcesses(); foreach(Process process in processlist) { Console.WriteLine("Process: {0} ID: {1}", process.ProcessName, process.Id); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1008459.html