我需要从 C# 应用程序启动 Node.js 服务器,这就像在 Node.js 控制台中运行 server.js
脚本一样简单。但是,我并不完全确定如何实现这一目标。
这是我目前所研究的:
在 Node.js 安装中,有一个名为 C:\Program Files (x86)\nodejs\nodevars.bat
的文件,这是 Node.js 的命令提示符窗口。要启动服务器,我可能会使用以下步骤:
- 执行
nodevars.bat
文件。 SendKeys
到新的进程控制台窗口以启动服务器。
这种方法感觉有点脆弱。无法保证目标用户会将他们的 Node.js 安装在同一个地方,而且向进程发送 key 也可能不是理想的解决方案。
另一种方法可能是:
- 编写一个执行
nodevars.bat
的批处理文件。 - 从 C# 应用程序执行批处理文件。
这似乎是一个更好的方法。但是,这里唯一的问题是 nodevars.bat
在新的控制台窗口中打开。
所以对于问题,有没有一种方法可以使用 node.js 安装中内置的功能来启动 node.js 服务器脚本?也许向 node.exe
发送参数?
最佳答案
如果是为多个用户服务,即作为服务器,那么你可以使用 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.
}
关于c# - 从 C# 应用程序启动 Node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34629681/