2014-02-20 46 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

如何在WaitForExit()方法之后创建一个新的'Process'对象?你的'string.Format'在你的情况下是无用的。 –

+0

这不起作用。 Mongodb需要一些时间来初始化。节点服务器启动得太早。 – marcel

回答

2

我不熟悉,所以有关我不能给复制pastable代码的工具,但我'd试图实现这个流程( -pseudo-code):

  1. 创建一个进程来启动MongoDB的
  2. 等待一段时间(我会说5秒)
  3. 尝试连接到MongoDB的
  4. 如果连接succeedes,GOTO 7
  5. 等一小会儿
  6. GOTO 3
  7. 创建一个进程来启动的Node.js
  8. 等待一小会儿
  9. 尝试获取来自node.js的
  10. 一些内容
  11. 如果获取成功,GOTO 13
  12. 等待一小会儿
  13. GOTO 9
  14. 退出

“等待”,如果你想提供一些反馈在不同的线程可能发生的步骤(我想例如具有定时ProgressChanged呼叫BackgroundWorker

关于第二个想法,这可能适用于该启动工具的任意组合,但没有立即...

1

您可以使用WaitForExit()这样。

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

OR

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

希望它可以帮助你......

+0

mongo进程没有退出,它保持打开状态。是否有可能检查过程是否正在等待输入,或运行空闲..某事。像那样? – marcel

+1

正如亚历克斯说的尝试连接到MongoDB,看看它是否正常运行。 – ZoolWay

+0

不幸的是,当mongodb没有完成初始化时,第二个过程开始得太早。 – marcel