我是以编程方式启动控制台应用程序.它们都显示conhost.exe
在任务管理器中.
如何设置进程名称,使其在任务管理器中显示为?
我如何设置进程的示例:
public static Process CreateMultiCoreExeProcess(int coreIndex, int coresToUse, string executableFilepath) { //* Create your Process Process process = new Process { StartInfo = { FileName = executableFilepath, Arguments = coreIndex + " " + coresToUse, UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true }, EnableRaisingEvents = true }; return process; }
...正如您所看到的,没有一个属性可以设置进程名称(我知道).我希望能够在创建过程时设置进程的名称.
重复问题备注:这不是尝试的重复.作为副本呈现的解决方案是针对流程的STATIC名称,在项目属性中设置.我正在运行我的进程DYNAMICALLY(在运行时),并希望在那时设置进程名称.
更新:我确信这是不可能的.至少不是以现实(即永久)的方式.我相当肯定我们"被卡在"程序集信息中提供的名称,并且无法在任务管理器中以编程方式更改它.这对我的应用程序来说是不幸的,因为它会产生10多个相同的进程可执行文件.有时我只想杀死其中一个,但我无法确定任务管理器中的哪个是因为它们都具有相同的名称.
您可以在创建后使用P/Invoke更改进程名称.(因为在创建它时无法指定它.默认名称是程序中指定的名称.)
[DllImport("user32.dll")] static extern int SetWindowText(IntPtr hWnd, string text); ... SetWindowText(process.MainWindowHandle, "Process Name/Title");
编辑:在网上四处看看,看起来您可能需要等待100ms左右才能设置名称(通过Thread.Sleep
或process.WaitForInputIdle
在GUI应用程序的情况下).