Cmd 启用windows服务以使用命令行

Cmd 启用windows服务以使用命令行,cmd,windows-services,node-windows,Cmd,Windows Services,Node Windows,我已经编写了一个简单的服务,它现在在我的windows服务上处于活动状态。我的问题是我无法通过windows服务访问cmd。我正在为我的服务使用nodejs express,为cmd访问使用node cmd,为节点窗口创建服务。我的应用程序执行以下操作: app.get('/check', (req, res) => { cmd.run('start chrome'); res.status(200).send('The server is working correctl

我已经编写了一个简单的服务,它现在在我的windows服务上处于活动状态。我的问题是我无法通过windows服务访问cmd。我正在为我的服务使用nodejs express,为cmd访问使用
node cmd
,为节点窗口创建服务。我的应用程序执行以下操作:

app.get('/check', (req, res) => {
    cmd.run('start chrome');
    res.status(200).send('The server is working correctly :)');
});
对于那些不理解这一点的人来说,这基本上意味着:

当我手动运行时,它会启动chrome。当我将其用作windows服务时,它不会启动chrome,但会与
服务器正常工作:)


由于某些原因,cmd命令在windows服务中不起作用?

来自windows Vista的服务进程在用户进程运行的不同会话/桌面上运行(有Microsoft)


因此,如果从服务启动
chrome.exe
,它将在服务会话中运行,并且在用户桌面上不可见。您可以检查任务列表以确保它已启动。

您应该检查任务列表。服务运行在一个独立的、不可见的桌面上,启动的chrome实例应该在那里。好的,我看你是对的。谷歌浏览器确实是从后台开始的。但是为什么像
dir>some.txt这样的cmd命令不起作用呢?我在正确的位置尝试了此操作,但根本没有创建文件。
dir
(重定向操作符)是
cmd.exe
中的内部元素。我不知道
node cmd
是如何实现命令执行的,但是您可能需要
cmd/c“dir>some.txt”
之类的东西,当然,您还需要知道在运行命令时active directory是什么(或者包括文件的完整路径)并确保用于启动服务的帐户在文件夹中具有写入权限。是的,你是正确的。我现在真的让它工作了。您想添加您的第一条评论作为答案吗?这让我明白了发生了什么。我会把它标记为你的答案。有没有办法右键点击这个
chrome.exe
任务并执行类似于“带到这个用户的桌面”的操作?还有,你知道为什么命令
git
在这个
节点cmd
中不起作用吗?@FreddyBonda,对于
chrome
进程号。处理这类事情的通常方法是在用户会话中运行一个单独的进程,该进程将接收来自服务进程的消息。对于
git
,是否使用可执行文件的完整路径?如果没有,则系统路径或用户路径中是否包含指向git
命令的路径?请记住,您的服务是在单独的帐户下运行的。服务帐户有权访问/读取/更改git正在处理的文件夹结构吗?是的,你是对的,我想这就是我的问题所在。但是我的
系统变量
确实有一个路径
%USERPROFILE%\AppData\Local\Programs\Git\cmd
。那么为什么说git不被识别呢?似乎
%USERPROFILE%
是未知的?@FreddyBonda,不是,但是
%USERPROFILE%
是一个变量,将扩展到用户的配置文件文件夹。两个不同的用户将具有不同的配置文件,并且(几乎可以肯定)具有不同的路径。您需要确保服务帐户的配置文件中包含
git
文件夹的副本,或者您可以将二进制文件放在所有帐户共享的文件夹中并调整路径。
Listen for the GET '.../check' call, then do:
    cmd: start chrome
    return response 'The server is working correctly :)'