1

我正在让我的 Perl 作为 Windows 上的服务软运行。

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

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

该命令如下所示:

START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\"

当我直接从 cmd.exe 启动此命令时,进程的标题设置得很好。

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

cmd /c ""C:\path\to\script.bat" "

我错过了什么吗?

注意:我肯定会尝试为我的服务设置标题,因为我没有找到比在服务的停止挂钩中启动“taskkill”命令更简洁的方法来停止它,并将标题名称作为参数(不知道如何抓到生成进程的PID)

谢谢。

4

3 回答 3

3

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

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

DOS“启动”命令用于将命令拆分(fork?)到一个新窗口,将其与调用 DOS/cmd 窗口分开(除非您使用正确的启动参数将其保持在同一窗口中)。启动命令的一部分是可选的“title”参数,它为您设置窗口标题。

但是您提到作为服务运行...服务通常没有窗口或 GUI,所以我不确定您为什么对窗口标题如此感兴趣。

最后,你可以把

title "The title of the window"

在你的批处理脚本中......或者如果你在一个 Perl 程序中,做

system "title \"Window title\"";

也将工作。

于 2012-04-19T20:05:48.987 回答
1

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

http://ss64.com/nt/cmd.html

cmd.exe /C START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\"
于 2012-04-19T15:52:19.790 回答
0

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

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");
于 2017-01-20T01:05:07.957 回答