即使第三方应用程序失败,也要继续申请

时间:2014-02-19 10:52:38

标签: c# .net visual-studio-2010

我有一个第三方exe文件名Projtest.exe并使用我自己编写的c#控制台应用程序通过命令行运行Projtest.exe。 我能够成功编写应用程序,但我的问题是,由于一些未知的原因,Projtest.exe停止工作并抛出一个错误窗口。我的应用程序正在坚持这一点。我想要的是继续我的应用程序,如果Projtest。 exe会抛出一个错误窗口。我怎么能这样做。我的代码部分如下所示。

try
{

   var pro = new Process
   {
      StartInfo = {
                    Arguments = string.Format("Projtest.exe  {0} {1} ", arg1, arg2)
                   }
   };

  pro.Start();

  pro.WaitForExit();
  var exit = pro.ExitCode;
}
catch (Exception ex)
{
  Console.WriteLine(ex.ToString());
}

1 个答案:

答案 0 :(得分:0)

你可以做的是定期检查'专家'是否每10秒响​​应一次。 您只需使用计时器即可完成此操作,或者您可以创建一个线程来执行此操作。 此外值得检查退出此处,因此您不会阻止您的申请。 这是一个带计时器的例子。

       static Timer appCheck = new Timer();
    static Process pro;
    static void Main(string[] args)
    {

        appCheck.Interval = (10000);                        // set timer interval in ms   
        appCheck.AutoReset = true;
        appCheck.Elapsed += new ElapsedEventHandler(appCheck_Tick);

        try
        {

            pro = new Process
            {
                StartInfo =
                {
                    Arguments = string.Format(@"Projtest.exe"),
                    FileName = string.Format(@"Projtest.exe")
                }
            };
            pro.Start();  // starts your program
            appCheck.Start(); // starts the timer to keep a watch on your program
            while (true) // this just keeps your console window open. if you use waitForExit your application will be blocked and the timer won't fire. 
            {
            }
            //pro.WaitForExit();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

    static void appCheck_Tick(object sender, EventArgs e)
    {
        if (!pro.HasExited)
        {
            if (pro.Responding == false)
            {
                appCheck.Stop();                // stop the timer so you don't keep getting messages
                Console.WriteLine("Not responding");

            }
        }
        else
        {
            appCheck.Stop();                // stop the timer so you don't keep getting messages
            Console.WriteLine("exited");    
        }

    }