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

Mik*_*son 9 c# batch-file node.js

我需要从C#应用程序启动Node.js服务器,这就像server.js在Node.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

Ben*_*Ben 9

如果要为多个用户(即服务器)提供服务,则可以使用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.
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.我没有使用批处理文件,而是执行`node.exe`并将路径传递给我的`server.js`文件作为参数.`node.exe`应用程序自动启动服务器,这是一件很棒的事情. (2认同)