从C#应用程序启动Node.js服务器

9
出现了这样一个需求,我需要从C#应用程序启动Node.js服务器,这就像在Node.js控制台中运行server.js脚本一样简单。然而,我不确定如何实现。
以下是我目前调查的内容:
在Node.js安装中,有一个名为C:\Program Files (x86)\nodejs\nodevars.bat的文件,这是Node.js的命令提示窗口。要启动服务器,可能可以执行以下步骤:
1. 执行nodevars.bat文件。 2. 使用SendKeys发送按键到新进程控制台窗口以启动服务器。
这种方法感觉有点脆弱。无法保证目标用户将其Node.js安装在同一位置,而且向进程发送按键可能不是理想的解决方案。
另一种方法可能是:
1. 编写一个批处理文件来执行nodevars.bat。 2. 从C#应用程序执行批处理文件。
这似乎是一个更好的方法。但是,唯一的问题是nodevars.bat会在一个新的控制台窗口中打开。
那么问题来了,是否有一种方法可以使用内置在Node.js安装中的功能来启动node.js服务器脚本?也许是向node.exe发送参数?
2个回答

10
如果需要作为服务器为多个用户提供服务,则可以使用os-service包并安装Windows服务。然后,您可以使用标准API启动和停止服务。
如果要将服务器作为“单一目的”服务器启动,即仅为当前用户提供服务,则os-service不是正确的方法。(通常,在使用此方法时,您将为服务指定一个唯一的端口,该端口仅由您的应用程序使用)。
要从C#启动批处理文件或其他控制台应用程序而不显示控制台窗口,请使用标准方法,但务必指定:
ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = false;   // This is important
psi.CreateNoWindow = true;     // This is what hides the command window.
psi.FileName = @"c:\Path\to\your\batchfile.cmd";
psi.Arguments = @"-any -arguments -go Here";   // Probably you will pass the port number here
using(var process = Process.Start(psi)){
    // Do something with process if you want.
}

2
这对我有用。我没有使用批处理文件,而是执行了 node.exe 并将我的 server.js 文件路径作为参数传递进去。node.exe 应用程序会自动启动服务器,这是一件美妙的事情。 - Mike Eason
嗨,我已经按照以下方式启动了节点服务器。现在,当窗口关闭时,我必须停止该进程。 - lazzy_ms

1

有几种不同的包可以选择,但我建议使用os-service包。


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