19

我正在使用它来获取默认网络浏览器的路径和可执行文件:

public static string DefaultWebBrowser
        {
            get
            {

                string path = @"\http\shell\open\command";

                using (RegistryKey reg = Registry.ClassesRoot.OpenSubKey(path))
                {
                    if (reg != null)
                    {
                        string webBrowserPath = reg.GetValue(String.Empty) as string;

                        if (!String.IsNullOrEmpty(webBrowserPath))
                        {
                            if (webBrowserPath.First() == '"')
                            {
                                return webBrowserPath.Split('"')[1];
                            }

                            return webBrowserPath.Split(' ')[0];
                        }
                    }

                    return null;
                }
            }
        }

和:

 protected static bool Run(string FileName, string Args)
        {
            try
            {
                Process proc = new Process();

                processInfo.FileName = FileName;
                 proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal;

                if(Args != null) proc.StartInfo.Arguments = Args;

                proc.Start();

                return true;
            }
            catch (Exception) { }

            return false;
        }

然后我调用网络浏览器:Run(DefaultWebBrowser, "foo.html")

问题是:上面的函数调用的是 Firefox 和 IE(我电脑上安装的两个网络浏览器),而不是默认的网络浏览器 Internet Explorer。我不知道如何解决这个问题。

编辑

我已经下载并安装了谷歌浏览器,将其设置为默认网络浏览器,但奇怪的是,上面的错误并没有发生。

4

6 回答 6

43

您可以将所有代码替换为

System.Diagnostics.Process.Start(pathToHtmlFile);

这将自动启动您的默认浏览器,或者查找.htm.html文件的默认处理程序并使用它。

现在将 Firefox 设置为默认值,这有时会导致奇怪的异常(我认为如果 Firefox 是第一次启动),因此您可能需要try/catch对其进行处理。

于 2012-06-12T02:06:35.100 回答
16

对于.Net Core,您需要调用(建议在.Net Core 2.0 Process.Start throws "The specified executable is not a valid application for this OS platform"

 var proc = Process.Start(@"cmd.exe ", @"/c " + pathToHtmlFile); 

当我尝试时Process.Start(pathToHtmlFile);,我得到了System.ComponentModel.Win32Exception: The specified executable is not a valid application for this OS platform

于 2019-05-29T06:30:00.067 回答
1

对于那些没有 html 默认关联到浏览器的用户,请使用

System.Diagnostics.Process.Start("Chrome", Uri.EscapeDataString(pathToHtmlFile))

于 2017-01-23T08:21:26.393 回答
1

如果您遇到System.ComponentModel.Win32Exception异常,则需要设置UseShellExecutetrue

var p = new Process();
p.StartInfo = new ProcessStartInfo(@"C:\path\test.html")
{
    UseShellExecute = true
};
p.Start();
于 2022-02-26T21:29:15.367 回答
0

使用时出现此错误System.Diagnostics.Process.Start(pathToHtmlFile);

System.ComponentModel.Win32Exception: 'The specified executable is not a valid application for this OS platform.'

我可以使用以下代码在默认浏览器中打开 html 文件:

System.Diagnostics.Process process = new System.Diagnostics.Process();
try
{
    process.StartInfo.UseShellExecute = true;
    process.StartInfo.FileName = pathToHtmlFile;
    process.Start();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}
于 2021-08-29T15:22:51.850 回答
-1

我使用代码,我首先在其中查找 exe 文件。例如,如果存在 chrome.exe(在其默认路径中),如果存在 firefox.exe 或 launcher.exe(用于歌剧)等...如果不存在,请尝试使用 pathToHtmlFile 参数运行 iexplore.exe。这是我的解决方案,我使用外部配置,设置我的浏览器,不管在操作系统中设置什么默认值。

于 2017-12-04T10:57:30.677 回答