运行时进程名称更改(C++)

5

在win32中,是否有可能在运行时更改进程名称(出现在任务管理器的“进程”下面)?我希望程序能够更改自己的名称,而不是其他程序的名称。如果能提供帮助,最好使用C++。为了消除任何关于病毒的想法,请注意,这不是病毒,我知道自己在做什么,这是为了我的个人使用。


你不是在写病毒,对吧? - xtofl
1
如果他想这样做,那么更容易且更有效的方法是在病毒的exe文件中更改名称。 - Brian
3个回答

7

我认为在运行时更改进程名称的原因是有效的,以下是我的解释:

我有一个在服务器上持续运行的exe程序,虽然它不是一个服务。服务器上可以运行多个此类进程。该进程是一个调度系统。每个被调度、监控和控制的生产线都需要运行一个进程实例。想象一下一个有7条生产线需要进行调度的工厂,其中包括主装配线、3条子装配线和3条加工线。

与其在任务管理器中看到7次sched.exe,更好的做法是看到以下内容: sched-main sched-sub1 sched-sub2 sched-sub3 sched-mach1 sched-mach2 sched-mach3

这对于管理员来说将会更加有帮助(在这种情况下,用户不应该看到任务管理器)。如果其中一个进程挂起,管理员可以轻松地知道哪个进程需要终止并重新启动。


这适用于任何解释性语言,如perl或python脚本、批处理文件、java进程,甚至在node中运行的javascript也会遇到此问题。其中一些有自己的方法来解决这个问题,你可以搜索批处理文件和Python的解决方案。 - mfisch

1

我在VB中找到了code来完成这个任务。我相信将其转换为C++代码不会太难。

关于底层内容的一本好书是Microsoft Windows Internals

我同意Peter Ruderman的观点

这不是你应该做的事情。


这只是黑客入侵任务管理器 - 这显然是一个危险的解决方案。 - Mike Weir

1

我知道你在问Win32,但在大多数*nix下,只需更改argv [0]即可实现。


抱歉,argv是什么?还有*nix是什么? - Tom Johnson
我所说的*nix,指的是大多数不同的Unix变体,如Linux、FreeBSD等。argv是在Unix shell中用于保存命令行的变量名称,它是一个字符串数组,其中argv[0]指的是程序的名称。 - Josh Weatherly
我不会声称这适用于大多数Unix变体,但在Linux > 2.6.9上,正确的方法是使用prctl,特别是PR_SET_NAME。 - mfisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接