c++ - 在 Windows 中设置子进程名称?

标签 c++ windows winapi

我有一个进程,它运行多个子进程(每个子进程都没有 GUI),它需要为任务管理器为所有子进程设置不同的“名称”和“描述”。是否可以使用 Win API?我找不到适用于 Windows 系列的解决方案。

我查看 WriteProcessMemory,但它看起来像是作弊形式,即使可以更改名称也是如此。 复制 .exe 文件的解决方案,运行它,并在处理完成后 - 删除它 - 更加欺骗。 可能存在使用从内存启动进程的解决方案(因此,我将 exe 文件加载到内存,然后从那里启动它),但它看起来也很糟糕,我不确定我是否能够更改名称。

我希望必须有解决方案来将进程名称设置为我自己的子进程,不是吗?

最佳答案

您无法更改出现在任务管理器中的“图像名称”。正如您所发现的,Windows 从实际执行的文件的名称中获取它,并且显示不同内容的唯一方法是实际运行具有不同名称的文件(例如通过复制可执行文件)。

如果您的目标是较新版本的 Windows,任务管理器可以显示“命令行”列(查看 -> 选择列)。您可以通过在命令行中包含一个特定的标志,或者通过将 lpCommandLine 参数的第一个标记设置为唯一的东西来使您的进程可区分 - 您只需要同时设置 lpApplicationName 参数到您要运行的实际可执行文件,以便加载程序可以找到它。

例如:

BOOL ret1 = CreateProcess(
               "c:\\program\\worker.exe",
               "worker1.exe infile outfile",
               ...);

BOOL ret2 = CreateProcess(
               "c:\\program\\worker.exe",
               "worker2.exe infile outfile",
               ...);

这些在任务管理器中将具有相同的图像名称值,但它们将通过命令行值区分。

关于c++ - 在 Windows 中设置子进程名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783985/

相关文章:

python - 多处理卡住计算机

c - 从 C 使用 WinRT?

c# - 如何防止另一个应用程序在 C# 中移动 (MS Excel 2010)

使用 Visual Studio 的 C++ 编译错误(LNK1120 和 LNK2019)

c++ - 使用 std::bind 将 Qt 信号连接到插槽

c++ - 如何抽象出数学软件中的整数类型

c++ - Windows Spooler Events API 不会为网络打印机生成事件

python - 使用 Python 的 PowerShell 中的 Unicode? Windows 中的替代 shell?

c# - 从资源管理器窗口获取文件夹路径

c++ - LPCTSTR 与 StringCchCat 的连接