在Windows中设置子进程名称?

时间:2014-05-21 13:02:40

标签: c++ windows winapi

我有进程,运行多次子进程(每个进程没有GUI),并且需要设置所有不同的子进程"名称"和"描述"任务管理器。是否可以使用Win API?我无法找到Windows系列的解决方案。

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

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

1 个答案:

答案 0 :(得分:6)

您无法更改任务管理器中显示的“图像名称”。正如您所发现的,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",
               ...);

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