运行嵌套的批处理文件

时间:2014-02-20 07:43:01

标签: c# .net batch-file

我想运行两个批处理文件,它们启动一个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());
        }
    }

如何在mongo完成初始化后执行下一个批处理文件?

2 个答案:

答案 0 :(得分:2)

我不熟悉所涉及的工具,因此我无法提供可复制的代码,但我会尝试实现此流程( very -pseudo-code):

  1. 创建一个启动MongoDB的进程
  2. 等一会儿(我说5秒钟)
  3. 尝试连接MongoDB
  4. 如果连接成功,GOTO 7
  5. 等一会儿
  6. GOTO 3
  7. 创建一个启动node.js的进程
  8. 等一会儿
  9. 尝试从node.js
  10. 获取某些内容
  11. 如果获取成功,GOTO 13
  12. 等一会儿
  13. GOTO 9
  14. 退出
  15. 如果你想提供一些反馈意见,那么“等待”步骤可能会发生在另一个主题上(我正在考虑BackgroundWorker定时ProgressChanged次调用)

    第二个想法,这可能适用于任何开始但不能立即获得的工具组合......

答案 1 :(得分: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

希望它对你有所帮助......