通过非交互后台进程以编程方式为任务管理器显示设置自定义进程名称

问题描述

我知道以前曾问过这种问题,但是我有一个非常特殊(且相当复杂)的案例,该案例稍有不同,因此通常的解决方案不起作用或不适用。

基本上,我有一个由VSIX调试器启动器启动的控制台应用程序。此应用程序的目的是加载托管的DLL,建立适当的环境,并允许从Visual Studio调试DLL的源代码,就像调试普通C#项目一样。不同之处在于该项目不是可执行文件,而是库,因此需要一个主机(即相关的控制台应用程序)。这与ASP.NET项目与IIS / IIS Express的工作方式非常相似-只是我编写了一个自定义主机,并通过自定义VSIX管理其启动。

自定义主机应用程序是.NET Core控制台应用程序,调试器无需任何窗口即可启动它。这是有意的,因为它不需要交互式输入,并且所有输出都将重定向到Visual Studio的调试器会话(即“事件”选项卡)。

该应用程序也是通用的,因此在实际启动之前,它不知道调试项目的名称。最重要的是,我可以有多个Visual Studio实例同时调试多个不同的项目!

我真的很想简化任务管理器中这些进程的区分,以便它们分别显示为在每个相应实例中托管的特定DLL项目的名称。到目前为止,我的尝试是:

// 1. This crashes with InvalidOperationException because there is no window.
Console.Title = loadedDllProjectName;

// 2. This doesn't crash,but has no effect,either.
[DllImport("user32.dll")]
static extern int SetwindowText(IntPtr hWnd,string text);
...
SetwindowText(Process.GetCurrentProcess().MainWindowHandle,loadedDllProjectName);

FWIW,任务管理器以其认映像名称显示该进程,并在后台进程中列出该进程。后者很好并且可以预期。但是我想改变前者。怎么样?

更新 根据{{​​3}},可悲的是我的追求可能是空洞的。不过,仍然希望得到令人鼓舞的提示

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)