System.Diagnostics.Process ExitCode 1

Я использую простой C# статический метод для запуска приложения Windows. Все отлично работает со всеми 32 или 64-битными приложениями, кроме iexplore.exe.

Когда я звоню:

 ExecHttp(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe", "http://www.google.it");

Метод System.Diagnostics.Process WaitForExit() не ожидает закрытия iexplore.exe, а ExitCode возвращает код выхода =1.

Вот ExecHttp:

public static int ExecHttp(String strURL, String strArguments)
{
    int intExitCode = 99;
    try
    {
        Process objProcess = new System.Diagnostics.Process();
        strArguments = "-nomerge " + strArguments;
        System.Diagnostics.ProcessStartInfo psi = new ProcessStartInfo(strURL, strArguments);
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        psi.UseShellExecute = true;
        objProcess.StartInfo = psi;
        objProcess.Start();
        Thread.Sleep(2000);
        objProcess.WaitForExit();
        intExitCode = objProcess.ExitCode;
        objProcess.Close();
    }
    catch (Exception ex)
    {
        //log the exception 
        throw;
    }
    return intExitCode;
}

Я провел большой поиск, и единственный найденный способ - добавить ключевое слово -nomerge в свойство аргументов System.Diagnostic.Process.ProcessStartInfo. WaitForExit() прекрасно работает с другими процессами Windows.exe, но НЕ с процессом iexplore.exe. Как мы можем проверить состояние процесса iexplore.exe?

Спасибо

1 ответ

Наконец, я реализовал это решение, я не удовлетворен, но он работает. После открытия нового uri с аргументом -nomerge мы ждем три секунды и, наконец, ищем новый процесс, которому принадлежит эта новая страница. Теперь мы вызываем WaitForExit(), который работает как положено, вот мой код, любые предложения приветствуются:

public static int ExecHttp(String strBrowserApp, String strURL, String strSessionName, ref String strMessage)
{
int intExitCode = 99;
try
{
     strMessage = String.Empty;
     System.Diagnostics.Process.Start(strBrowserApp, "-nomerge " + (String.IsNullOrEmpty(strURL) ? "" : strURL));
     System.Threading.Thread.Sleep(3000);
     System.Diagnostics.Process objProcess = null;
     System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcesses();
     foreach (System.Diagnostics.Process proc in procs.OrderBy(fn => fn.ProcessName))
     {
          if (!String.IsNullOrEmpty(proc.MainWindowTitle) && proc.MainWindowTitle.StartsWith(strSessionName))
          {
               objProcess = proc;
               break;
          }
      }
      if (objProcess != null)
      {
          objProcess.WaitForExit();
          intExitCode = 0;
          objProcess.Close();
      }
}
catch (Exception ex)
{
     strMessage = ex.Message;
}
}
Другие вопросы по тегам