如何打开浏览器然后杀死它?

时间:2015-02-20 07:10:17

标签: c#

我正在为桌面应用程序实现OAUTH类型的身份验证,在此过程中,我需要打开一个webbrowser,然后在收集令牌时将其关闭。

我已尝试过这个:

var p = Process.Start(new ProcessStartInfo(url));
...
p.Kill(); //this won't work as p is null = no new process started

根据the documentation

  

如果进程已在运行,则不会启动其他进程资源。相反,重用现有流程资源,不会创建新的流程组件。在这种情况下,Start不会返回新的Process组件,而是将null返回给调用过程。

事实上,该页面刚刚作为Chrome(我的默认浏览器)流程中的新标签打开,我已经打开过了。

关于如何打开我可以杀死的默认浏览器的新进程的任何想法?

2 个答案:

答案 0 :(得分:4)

这里的主要问题是,第二个流程将被打开,Chrome会注意到一个实例已经打开,因此它会终止您的流程并将其添加到您已经打开的流程中。当你试图杀死进程时,它已经关闭了。但我认为你已经对此进行了整理。

我发现的是这个问题,它可以帮助你,但我没有测试它,它可能也在使用相同的过程,但无论如何,尝试一下:

https://superuser.com/questions/213460/how-can-you-configure-chrome-to-open-new-browser-instances-in-new-windows-rather

答案 1 :(得分:2)

我编写了一个小函数来使用SHDocVw打开webrowser。

您需要添加对名为Microsoft Internet Controls的COM组件的引用。你可以看到它here

它使您可以根据需要操作窗口。 (Task.Run只能在新线程中打开它,以便你可以删除它)

完成后,您可以拨打ie.Quit()

public void OpenKioskBrowser(string URL)
{
    Task.Run(() =>
    {
        SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
        ie.Navigate(URL);
        ie.ToolBar = 0;
        ie.AddressBar = false;
        ie.Width = 350;
        ie.Height = 200;
        ie.Visible = true;
    });
}

另一个使用示例(控制台应用程序):

static void Main(string[] args)
{
    SHDocVw.InternetExplorer browserObj = new SHDocVw.InternetExplorer();
    browserObj.Navigate("http://stackoverflow.com");
    browserObj.ToolBar = 1;
    browserObj.AddressBar = true;
    browserObj.FullScreen = true;
    browserObj.Visible = true;

    Thread.Sleep(5000);

    browserObj.Quit();
}