首页 > 解决方案 > 以编程方式从非交互式后台进程中为任务管理器显示设置自定义进程名称

问题描述

我意识到以前有人问过这类问题,但我有一个非常具体(而且相当复杂)的案例,它略有不同,所以通常的解决方案要么不起作用,要么不适用。

基本上,我有一个由 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,任务管理器在其默认图像名称下显示该进程并将其列在后台进程中。后者是好的和预期的。但我想改变前者。如何?

更新 据此,可悲是,我的追求可能是空洞的。不过,仍然希望得到一个令人鼓舞的提示!

标签: c#debuggingconsole-applicationvsix

解决方案


推荐阅读