我正在使用简单的C#静态方法来启动Windows应用程序。 除iexplore.exe之外,所有功能均可在所有32位或64位应用程序上正常运行。
当我打电话时:
ExecHttp(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe", "http://www.google.it");
System.Diagnostics.Process WaitForExit()方法不会等待iexplore.exe关闭,并且ExitCode会返回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;
}
我已经做了很多搜索,发现的唯一解决方法是在System.Diagnostic.Process.ProcessStartInfo Arguments属性上添加-nomerge关键字。 WaitForExit()在其他Windows .exe进程上工作正常,但不适用于iexplore.exe进程。 我们如何才能测试iexplore.exe进程的进程状态?
谢谢
答案 0 :(得分:0)
最后,我已经实现了此解决方案,我不满意,但是它可以工作。 使用-nomerge参数打开新uri后,我们等待三秒钟,最后搜索拥有该新页面的新进程。 现在我们调用可以正常工作的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;
}
}