启动默认浏览器 - Windows

3

当像这样启动默认浏览器时:

        Dim trgt1 As String = "http://www.vbforums.com/showthread.php?t=612471"
        pi.FileName = trgt1
        System.Diagnostics.Process.Start(pi)

打开该页面需要约40秒。

如果我这样做,尽管这不是默认浏览器。

        Dim trgt1 As String = "http://www.vbforums.com/showthread.php?t=612471"
        pi.Arguments = trgt1
        pi.FileName = "iexplore.exe" 'or firefox.exe
        System.Diagnostics.Process.Start(pi)

它立即打开。这是一个错误还是一个功能?我已经尝试过将IE和FireFox都设置为默认浏览器。


当你第一次启动一个应用程序时,通常会比第二次启动需要更长的时间(由于缓存)。你考虑过这种影响吗? - Dirk Vollmar
应用程序已经启动。 - dbasnett
2个回答

3

1

Windows通过注册表查找适合打开文档的应用程序(通过explorer.exe)。

2

您明确告诉Windows使用xxx.exe打开文档。

针对不断变化的目标的更新:;-)

之所以如此缓慢,是因为您指定的Url看起来与它知道如何使用浏览器或其他方式打开的任何内容都不相似,必须采用蛮力来确定这一点。

如果要加快使用默认浏览器启动的速度,请从HKEY_CURRENT_USER\Software\Classes\http\shell\open\command获取并使用#2。

使用此函数检索默认浏览器的路径。

/// <summary>
/// Reads path of default browser from registry
/// </summary>
/// <returns></returns>
private static string GetDefaultBrowserPath()
{
   string key = @"htmlfile\shell\open\command";
   RegistryKey registryKey =
   Registry.ClassesRoot.OpenSubKey(key, false);
   // get default browser path
   return ((string) registryKey.GetValue(null, null)).Split('"')[1];
}

从C#程序中在默认浏览器中打开URL。

string defaultBrowserPath = GetDefaultBrowserPath();

try
{
   // launch default browser
   Process.Start(defaultBrowserPath, "http://www.yahoo.com");
}
catch (Exception exp)
{
   MessageBox.Show(exp.Message);
}

在C#程序内部以默认浏览器的独立实例打开URL。

// open URL in separate instance of default browser
Process p = new Process();
p.StartInfo.FileName = GetDefaultBrowserPath();
p.StartInfo.Arguments = "http://www.yahoo.com";
p.Start();

从这篇博客文章中得知:


我有点弄明白了第2个;) 有没有办法加速第1个? - dbasnett
在另一个地方,我使用“mailto:blahblah”启动默认的邮件程序,它会立即运行。 - dbasnett
胜利者,胜利者,鸡肉晚餐。Dim brwsrKey As String = "HKEY_CURRENT_USER\Software\Classes\http\shell\open\command"Dim brwsr As String = Microsoft.Win32.Registry.GetValue(brwsrKey, "", "").ToStringDim foo() As String = brwsr.Split(New Char() {""""c}, StringSplitOptions.RemoveEmptyEntries) - dbasnett
我说得太早了。在另外两台机器上,一台是XP,另一台是Windows 7,它都没有工作。没有浏览器窗口出现,或者如果有一个打开的窗口,它也没有浏览到指定的位置。 - dbasnett
@dbasnett - 好的,所以“在我的机器上可以运行”不行,是吗?哈哈。我更新了答案,提供了另一种可能性。请告诉我。 - Sky Sanders

0

我对Sky的看法有所不同。我现在已经在许多机器上尝试过这个方法,但是这个值

string key = @"htmlfile\shell\open\command";

似乎总是默认为IE,即使Chrome被设置为默认浏览器。老实说,我只在将Chrome设置为默认浏览器的机器上尝试过这个方法,没有在将Firefox设置为默认浏览器的机器上尝试过,因此它可能需要更多的测试,但是从我的测试中,这个值似乎只存储IE。

希望这能帮助那些使用其他浏览器的人。

我将坚持使用process.start(url),因为这几乎可以保证每次都会得到用户的默认浏览器。让框架来处理它!这就是为什么MS建立它的原因...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接