Csharp/C#教程:启动后获取Process的友好名称分享


启动后获取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

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐