【问题标题】:why does my cmd.exe process doesn't have the "title" property set when launched as a service through perl?为什么我的 cmd.exe 进程在通过 perl 作为服务启动时没有设置“title”属性?
【发布时间】:2012-05-01 01:33:25
【问题描述】:

我正在将我的 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)

谢谢。

【问题讨论】:

    标签: perl windows-services cmd win32-process


    【解决方案1】:

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

    当一个 cmd 进程在 Windows 中启动时,它会获得一个默认的寡妇标题。 DOS“title”命令可以任意设置窗口标题。

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

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

    最后可以放

    title "The title of the window"
    

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

    system "title \"Window title\"";
    

    也可以。

    【讨论】:

    • 我将把这个答案作为解决我的问题,因为你启发了我这样一个事实,即如果没有生成窗口,则无法设置标题属性。因此,在我的情况下,即使设置了标题,也不会在服务启动 system(my_START_command) 时将其计算在内。我正在尝试获取此标题,因为该进程未链接到服务启动的进程,因此在我停止服务时不会停止
    【解决方案2】:

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

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

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

    【讨论】:

    • 同样的结果,cmd.exe使用的命令行不包含标题,而是一个""字符串。
    【解决方案3】:

    你也可以使用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");
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2021-10-14
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      相关资源
      最近更新 更多