2014-02-20 2 views
1

Я бы хотел запустить два командных файла, которые запускают mongodb и nodejs-сервер.Выполнение вложенных пакетных файлов

Для запуска узла-сервера мне нужно дождаться выполнения mongodb.

Я до сих пор, что я могу запустить MongoDB так:

static void Main(string[] args) 
    { 
     Process proc = null; 
     try 
     { 
      string targetDir = string.Format(@"D:\nodejs\host"); 
      proc = new Process(); 
      proc.StartInfo.WorkingDirectory = targetDir; 
      proc.StartInfo.FileName = "mongo.bat"; 
      proc.StartInfo.CreateNoWindow = false; 
      proc.Start(); 
      proc.WaitForExit(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()); 
     } 
    } 

Как я могу выполнить следующий пакетный файл после Монго завершения инициализации?

+1

Как создать новый объект 'Process' после метода' WaitForExit() '? Ваш 'string.Format' бесполезен, кстати, в вашем случае. –

+0

Это не работает. Mongodb нужно некоторое время для инициализации. Node-Server запускается слишком рано. – marcel

ответ

2

Я не знаком с инструментами, участвующих поэтому я не могу дать копию-pastable кода, но я «d попытка реализовать этот поток (очень Псевдо-код):

  1. Создать процесс для запуска MongoDB
  2. Подождите некоторое время (я бы сказал, что через 5 секунд)
  3. Попытка подключения к MongoDB
  4. Если подключение succeedes, GOTO 7
  5. Подождите немного, пока
  6. GOTO 3
  7. Создать процесс для запуска Node.js
  8. Подождите немного, пока
  9. Попытка принести некоторое содержимое из node.js
  10. Если выборка успешно, GOTO 13
  11. Подождите немного, пока
  12. GOTO 9
  13. Выход

«ждать» шаги может произойти в другом потоке, если вы хотите, чтобы обеспечить обратную связь (Я имею в виду, например, BackgroundWorker с синхронизированными ProgressChanged вызовами)

на второй мысли, это можно применить к любой комбинации инструментов, которые начинаются, но не сразу доступны ...

1

Вы можете использовать WaitForExit() вот так.

proc.Start(); 
proc.WaitForExit(1000 * 60 * 5); // wait for 5 minutes. 

ИЛИ

proc = new Process(); 
while (!proc.HasExited) 
{ 
    //mongoDB started 
} 
// Now start node server 

Надеется, что это помогает ...

+0

процесс mongo не выходит, он остается открытым. Нет ли возможности проверить, ожидает ли процесс ввода или работает в режиме ожидания. Sth. как это? – marcel

+1

Как сказал Алекс, попробуйте подключиться к MongoDB, чтобы узнать, запущен ли он. – ZoolWay

+0

К сожалению, второй процесс начинается слишком рано, когда mongodb не закончил инициализацию. – marcel

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