为什么我的cmd.exe进程在通过perl作为服务启动时没有设置“title”属性?

为什么我的cmd.exe进程在通过perl作为服务启动时没有设置“title”属性?,perl,windows-services,cmd,win32-process,Perl,Windows Services,Cmd,Win32 Process,我正在使我的Perl软件在windows上作为服务运行 为此,我使用Win32::Daemon模块操作SCM服务配置管理器并启动/停止我的服务 要启动我的服务,我使用system perl命令 该命令如下所示: START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\" 当我直接从cmd.exe启动此命令时,进程的标题已设置好 当通过服务I start启动命令时,进程的标题为空。 任务管理器说,启动的命令是: cmd /c

我正在使我的Perl软件在windows上作为服务运行

为此,我使用Win32::Daemon模块操作SCM服务配置管理器并启动/停止我的服务

要启动我的服务,我使用system perl命令

该命令如下所示:

START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\"
当我直接从cmd.exe启动此命令时,进程的标题已设置好

当通过服务I start启动命令时,进程的标题为空。 任务管理器说,启动的命令是:

cmd /c ""C:\path\to\script.bat" "
我错过什么了吗

注意:我正试图为我的服务设置一个标题,因为我没有找到比在服务的stop hook中启动taskkill命令更干净的方法来停止它,标题名称是一个参数。我不知道如何捕获生成的进程的PID


谢谢。

尝试执行您喜欢的命令。windows有两个commandshell如果我没记错的话,如果你使用cmd.exe,你总是使用新的


试着执行你的命令。windows有两个commandshell如果我没记错的话,如果你使用cmd.exe,你总是使用新的


我不是100%确定您的问题是什么,但是title命令可能会有所帮助

当cmd进程在Windows中启动时,它将获得默认的寡妇标题。DOS title命令可以将窗口标题设置为您喜欢的任何内容

DOS start命令用于拆分fork?该命令指向一个新窗口,将其与调用DOS/cmd窗口分开,除非使用正确的启动参数将其保持在同一窗口中。start命令的一部分是可选的title参数,用于设置窗口标题

但是你提到了作为一种服务运行。。。服务通常没有窗口或GUI,所以我不知道您为什么对窗口标题如此感兴趣

最后,你可以把

title "The title of the window"
在批处理脚本中。。。或者,如果您在Perl程序中

system "title \"Window title\"";

也可以。

我不能100%确定您的问题是什么,但title命令可能会有所帮助

当cmd进程在Windows中启动时,它将获得默认的寡妇标题。DOS title命令可以将窗口标题设置为您喜欢的任何内容

DOS start命令用于拆分fork?该命令指向一个新窗口,将其与调用DOS/cmd窗口分开,除非使用正确的启动参数将其保持在同一窗口中。start命令的一部分是可选的title参数,用于设置窗口标题

但是你提到了作为一种服务运行。。。服务通常没有窗口或GUI,所以我不知道您为什么对窗口标题如此感兴趣

最后,你可以把

title "The title of the window"
在批处理脚本中。。。或者,如果您在Perl程序中

system "title \"Window title\"";

也将起作用。

您还可以使用perl模块在控制台上设置标题,而且它也是跨平台的:

use Term::Title 'set_titlebar', 'set_tab_title';

set_titlebar("This goes into the title");

set_titlebar("Title", "And also print this to the terminal");

set_tab_title("This goes into the tab title");

set_tab_title("Tab Title", "And also print this to the terminal");

您还可以使用perl模块在控制台上设置标题,它也是跨平台的:

use Term::Title 'set_titlebar', 'set_tab_title';

set_titlebar("This goes into the title");

set_titlebar("Title", "And also print this to the terminal");

set_tab_title("This goes into the tab title");

set_tab_title("Tab Title", "And also print this to the terminal");

同样的结果,cmd.exe使用的命令行不包含标题,而是字符串。同样的结果,cmd.exe使用的命令行不包含标题,而是字符串。我将把这个答案作为解决问题的答案,因为您让我明白了一个事实,即如果没有生成窗口,则无法设置标题属性。因此,在我的例子中,即使设置了标题,当服务启动systemmy_START_命令时,它也不会被计算在内。我试图获取此标题,因为进程未链接到服务的已启动进程,因此在我停止服务时也未停止。我将把此答案作为解决我的问题的答案,因为您启发了我,如果没有生成窗口,则无法设置标题属性。因此,在我的例子中,即使设置了标题,当服务启动systemmy_START_命令时,它也不会被计算在内。我试图获取此标题,因为进程未链接到服务的已启动进程,因此在我停止服务时不会停止