如何在默认浏览器中打开c#

我正在设计一个小型的c#应用程序,其中有一个web浏览器。我目前有我的电脑上所有的默认说谷歌chrome是我的默认浏览器,但当我点击我的应用程序中的一个链接打开一个新窗口,它打开ie浏览器。有没有办法让这些链接在默认浏览器中打开呢?还是我的电脑出了问题?

我的问题是,我在应用程序中有一个网络浏览器,所以说你去谷歌,输入“堆栈溢出”,右键单击第一个链接,单击“在新窗口中打开”,它在IE中打开,而不是Chrome。这是我编码不正确的东西,还是我的计算机上有一个设置不正确

= = = = = =进行编辑

这真的很烦人。我已经知道浏览器是IE,但我之前有它工作良好。当我点击一个链接时,它在chrome浏览器中打开。当时我正在使用sharp develop来制作应用程序,因为我无法启动c# express。我做了一个新的windows安装,因为我在我的应用程序没有太远,我决定重新开始,现在我有这个问题。这就是为什么我不确定是不是我的电脑。为什么IE会在点击链接时启动整个浏览器,而不是简单地在默认浏览器中打开新链接?

434773 次浏览

看一下GeckoFX控制

GeckoFX是一个开源组件 这使得嵌入Mozilla很容易 Gecko (Firefox)到任何。net Windows 表单应用程序。写得很干净, 完全注释的c#, GeckoFX是 完美的替换默认 基于Internet explorer的WebBrowser 控制。< / p >

你有没有试过这里提到的Processas: http://msdn.microsoft.com/de-de/library/system.diagnostics.process.aspx?

你可以用

Process myProcess = new Process();


try
{
// true is the default, but it is important not to set it to false
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

你可以直接写

System.Diagnostics.Process.Start("http://google.com");

编辑: WebBrowser控件是IE的嵌入副本 因此,其中的任何链接都将在IE中打开

要改变这种行为,你可以处理Navigating事件。

public static void GoToSite(string url)
{
System.Diagnostics.Process.Start(url);
}

这应该能解决你的问题

试试这个,老派的方法;)

public static void openit(string x)
{
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}

使用:openit(“www.google.com”);

这为我打开了默认设置:

System.Diagnostics.Process.Start(e.LinkText.ToString());

在UWP:

await Launcher.LaunchUriAsync(new Uri("http://google.com"));

对于那些发现这个问题的dotnet核心。我找到了一个解决方案

代码:

private void OpenUrl(string url)
{
try
{
Process.Start(url);
}
catch
{
// hack because of this: https://github.com/dotnet/corefx/issues/10361
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
url = url.Replace("&", "^&");
Process.Start(new ProcessStartInfo(url) { UseShellExecute = true });
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Process.Start("xdg-open", url);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
Process.Start("open", url);
}
else
{
throw;
}
}
}

开放的动态

string addres= "Print/" + Id + ".htm";
System.Diagnostics.Process.Start(Path.Combine(Environment.CurrentDirectory, addres));

更新注册表的当前版本的浏览器 @“软件\ \ \ Microsoft Internet Explorer主要\ FeatureControl \ FEATURE_BROWSER_EMULATION”< / p >

public enum BrowserEmulationVersion
{
Default = 0,
Version7 = 7000,
Version8 = 8000,
Version8Standards = 8888,
Version9 = 9000,
Version9Standards = 9999,
Version10 = 10000,
Version10Standards = 10001,
Version11 = 11000,
Version11Edge = 11001
}


key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);

如果使用Process.Start(URL)dotnet core将抛出错误。下面的代码将在dotnet core中工作。你可以添加任何浏览器来代替Chrome

var processes = Process.GetProcessesByName("Chrome");
var path  = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path,  url);
在研究了很多之后,我觉得大部分给出的答案都不适用于dotnet核心。 1. __abc0;- dotnet core

时无效

2.它将工作,但它将阻止新窗口打开的情况下默认浏览器是chrome

 myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
myProcess.Start();

下面是最简单的,适用于所有场景。

Process.Start("explorer", url);

我的默认浏览器是谷歌Chrome和接受的答案是给出以下错误:

系统无法找到指定的文件。

我解决了这个问题,并设法通过使用以下代码打开默认浏览器的URL:

System.Diagnostics.Process.Start("explorer.exe", "http://google.com");

我在。net 5中使用它,在Windows上使用Windows窗体。它甚至适用于其他默认浏览器(如Firefox):

Process.Start(new ProcessStartInfo { FileName = url, UseShellExecute = true });

基于

我试着

System.Diagnostics.Process.Start("https://google.com");

这适用于大多数情况下,但我遇到了一个问题,有一个指向文件的url:

系统无法找到指定的文件。

所以,我尝试了这个解决方案,它只做了一点修改:

System.Diagnostics.Process.Start("explorer.exe", $"\"{uri}\"");

没有用““包装url,资源管理器会打开你的文档文件夹。

这适用于。net 5 (Windows):

 ProcessStartInfo psi = new ProcessStartInfo {
FileName = "cmd.exe",
Arguments = $ "/C start https://stackoverflow.com/",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
Process.Start(psi);

我是唯一一个太害怕调用System.Diagnostics.Process.Start()的字符串我刚刚从互联网上读?

        public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
{
Request = request;
string url = Request.Url;
            

if (Request.TransitionType != TransitionType.LinkClicked)
{   // We are only changing the behavoir when someone clicks on a link.
// Let the embedded browser handle this request itself.
return false;
}
else
{   // The user clicked on a link.  Something like a filter icon, which links to the help for that filter.
// We open a new window for that request.  This window cannot change.  It is running a JavaScript
// application that is talking with the C# main program.
Uri uri = new Uri(url);
try
{
switch (uri.Scheme)
{
case "http":
case "https":
{   // Stack overflow says that this next line is *the* way to open a URL in the
// default browser.  I don't trust it.  Seems like a potential security
// flaw to read a string from the network then run it from the shell.  This
// way I'm at least verifying that it is an http request and will start a
// browser.  The Uri object will also verify and sanitize the URL.
System.Diagnostics.Process.Start(uri.ToString());
break;
}
case "showdevtools":
{
WebBrowser.ShowDevTools();
break;
}
}
}
catch { }
// Tell the browser to cancel the navigation.
return true;
}
}

这段代码被设计用于CefSharp,但应该很容易适应。

修复Net 6的问题 我使用了来自ChromeLauncher的代码 ,默认浏览器将像它

internal static class ChromeLauncher
{
private const string ChromeAppKey = @"\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe";


private static string ChromeAppFileName
{
get
{
return (string) (Registry.GetValue("HKEY_LOCAL_MACHINE" + ChromeAppKey, "", null) ??
Registry.GetValue("HKEY_CURRENT_USER" + ChromeAppKey, "", null));
}
}


public static void OpenLink(string url)
{
string chromeAppFileName = ChromeAppFileName;
if (string.IsNullOrEmpty(chromeAppFileName))
{
throw new Exception("Could not find chrome.exe!");
}
Process.Start(chromeAppFileName, url);
}
}

我想对上面的一个答案发表评论,但我还没有找到代表。

System.Diagnostics.Process.Start("explorer", "stackoverflow.com");

可以工作,除非url有一个查询字符串,在这种情况下,这段代码只是打开一个文件资源管理器窗口。关键似乎是UseShellExecute标志,正如Alex Vang上面给出的答案(对其他关于在web浏览器中启动随机字符串的评论取模)。

您可以使用cmd命令start <link>在默认浏览器中打开一个链接,此方法适用于所有具有在cmd.exe上执行系统命令功能的语言。

这是我用于.NET 6的方法,用于执行重定向输出的系统命令&input,也非常确定它将在.NET 5上工作,只是做了一些修改。

using System.Diagnostics.Process cmd = new();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();




cmd.StandardInput.WriteLine("start https://google.com");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();