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

标签 c# node.js batch-file

我需要从 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 安装在同一个地方,而且向进程发送 key 也可能不是理想的解决方案。

另一种方法可能是:

  1. 编写一个执行nodevars.bat的批处理文件。
  2. 从 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/

相关文章:

c# - 在位图上绘制旋转一定角度的线

javascript - 如何处理从父 Promise 链返回的 Promise 以及各种可能的结果

javascript - 客户端等待服务器 promise 解决

javascript - 如何使用 phantom-crawler 将 html 源代码打印到控制台

batch-file - 批处理文件包含变量的外部文件

windows - 在 Dos 批处理文件中重命名多个文件

batch-file - 在不启动终端的情况下从 Windows 中的批处理文件启动可执行文件时如何设置进程优先级

时间:2019-03-17 标签:c#threadinginsetter

c# - 从 C# 中的 Assembly.LoadFrom() 返回对象

c# - 在 C# Unity3D 中将一个场景加载到另一个场景时播放动画?