C# Windows 8开放式桌面IE10

C# Windows 8开放式桌面IE10,c#,internet-explorer,windows-8,C#,Internet Explorer,Windows 8,当IE10是Windows 8上的默认浏览器,并且Internet选项->程序->选择打开链接的方式设置为始终在Internet Explorer中时,当您通过URL打开新进程时,它将在IE10的Metro版本中打开 有两种方法可以解决这个问题,但我还没有找到一种方法 将一个参数传递给iexplore.exe,告诉它在桌面上打开 通过编程更改注册表中Internet选项的值,打开URL,然后将其设置回以前设置的值 我觉得#2是我必须走的路线,但是,在注册表中查看HKLM\Software\Mic

当IE10是Windows 8上的默认浏览器,并且Internet选项->程序->选择打开链接的方式设置为
始终在Internet Explorer中时
,当您通过URL打开新进程时,它将在IE10的Metro版本中打开

有两种方法可以解决这个问题,但我还没有找到一种方法

  • 将一个参数传递给
    iexplore.exe
    ,告诉它在桌面上打开
  • 通过编程更改注册表中Internet选项的值,打开URL,然后将其设置回以前设置的值
  • 我觉得#2是我必须走的路线,但是,在注册表中查看
    HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    我甚至看不到任何与该设置非常相似的内容

    以前有没有人解决过这个问题,并能提供一些见解

    这不是一个道德问题-我只需要知道设置在哪里,或者是否有办法通过一个参数将其强制放到桌面上。我真的不需要知道这并不理想;我已经完全意识到这一事实。


    如果一个用户想在Metro中使用它,并且一直在Metro中工作,那么在使用URL时切换回桌面模式对他来说是相当烦人的。希望该网页是您想要的。

    现在我们了解了您的场景(自动测试),我们可以解释如何正确地执行此操作,并且它不涉及覆盖任何用户设置,甚至暂时也不涉及。即使用户将其默认浏览器设置为Internet Explorer以外的其他浏览器,它也可以工作

    你所做的是。下面是一个JavaScript示例。您可以通过少量导入将其应用于C#,也可以使用更优秀的解决方案,在C#应用程序中托管IE

    var ie = new ActiveXObject("InternetExplorer.Application");
    ie.Visible = true;
    ie.Navigate("http://www.microsoft.com/");
    WScript.Sleep(5000); // five seconds, say
    ie.Quit();
    

    @RaymondChen谢谢,但这不是一个道德问题——这是在桌面模式下打开的要求。我们将一个应用程序固定在一边进行屏幕录制,并为用户提供在浏览器中执行的任务,如果它在Metro中,他们看不到它,因此无法提供良好的用户体验。@RogerLipscombe我不想更改他们的默认浏览器,我想在不到一秒钟的时间内更改特定于IE的internet设置。这些关切与问题的范围完全无关。同样,这不是一个道德问题。你正在影响用户的选择。用户选择以新的IE样式打开网页,而您正在覆盖用户的选择。忽略用户设置的程序是对Windows的投诉来源。“我告诉Windows做X,但它不做X。Windows糟透了。”(如果你的程序在300毫秒的时间内崩溃,你的“临时”更改就会变成永久性的。)@RaymondChen是的,我完全理解这一点,但应用程序的重点是桌面测试。如果它们不在桌面上,则无法进行测试。您希望我拒绝这些用户使用我的应用程序吗?“对不起,您正在使用Windows 8;再见!”这也不太合适。如果你想要完全的控制,你可能想考虑通过WiFrase/WPF托管IE的实例。这不是我想要的——再次,我知道如何改变设置,因为它在我的文章中明确地说了那篇文章中所说的内容。我需要一种方法,通过编程强制他们进入桌面,而不是要求他们更改他们的首选项。这就是为什么我说(含蓄地,抱歉)这可能不可能,因为这是一个用户属性。这可能有效,但是我现在必须首先检测IE是否是他们的默认浏览器,才能运行替代代码。@Rudiviser您已经必须这样做,才能检测您需要修改的浏览器设置(桌面IE与新IE、桌面Firefox与新Firefox等)啊,是的,但还不是现在。Fx还没有发布它,根据我的测试,当URL默认调用Chrome时,Chrome不会以全屏模式启动。