2016-01-06 3 views
4

Требование возникло, что мне нужно запустить сервер Node.js из приложения C#, это так же просто, как запуск сценария server.js в консоли Node.js. Однако я не совсем уверен, как именно этого добиться.Запустите Node.js-сервер из приложения C#

Вот что я посмотрел в до сих пор:

В установке 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?

ответ

4

Если он предназначен для обслуживания нескольких пользователей, то есть в качестве сервера, то вы можете использовать пакет 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. 
} 
+1

Это работает для меня. Вместо использования командного файла я выполнил 'node.exe' и передал путь к файлу' server.js' в качестве аргумента. Приложение «node.exe» автоматически запускает сервер, который является прекрасной вещью. –

Смежные вопросы