我正在为桌面应用程序实现OAUTH类型的身份验证,在此过程中,我需要打开一个webbrowser,然后在收集令牌时将其关闭。
我已尝试过这个:
var p = Process.Start(new ProcessStartInfo(url));
...
p.Kill(); //this won't work as p is null = no new process started
如果进程已在运行,则不会启动其他进程资源。相反,重用现有流程资源,不会创建新的流程组件。在这种情况下,Start不会返回新的Process组件,而是将
null
返回给调用过程。
事实上,该页面刚刚作为Chrome(我的默认浏览器)流程中的新标签打开,我已经打开过了。
关于如何打开我可以杀死的默认浏览器的新进程的任何想法?
答案 0 :(得分:4)
这里的主要问题是,第二个流程将被打开,Chrome会注意到一个实例已经打开,因此它会终止您的流程并将其添加到您已经打开的流程中。当你试图杀死进程时,它已经关闭了。但我认为你已经对此进行了整理。
我发现的是这个问题,它可以帮助你,但我没有测试它,它可能也在使用相同的过程,但无论如何,尝试一下:
答案 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();
}