【问题标题】:Start Node.js server from a C# Application从 C# 应用程序启动 Node.js 服务器
【发布时间】:2016-04-10 08:09:41
【问题描述】:

出现了我需要从 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 发送参数?

【问题讨论】:

    标签: c# node.js batch-file


    【解决方案1】:

    如果是为多个用户服务,即作为服务器,那么你可以使用 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.
    }
    

    【讨论】:

    • 这对我有用。我没有使用批处理文件,而是执行了node.exe 并将server.js 文件的路径作为参数传递。 node.exe 应用程序自动启动服务器,这是一件好事。
    • 嘿,我已经启动了节点服务器。现在,我必须在窗口关闭时停止该过程。
    【解决方案2】:

    有几个不同的,但我推荐os-service 包。

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多