web-dev-qa-db-ja.com

C#でデフォルトのブラウザで開く方法

私は小さなC#アプリケーションを設計していて、その中にWebブラウザがあります。私は現在、自分のコンピュータ上のすべてのデフォルトを使用しています。Googleクロムがデフォルトのブラウザですが、アプリケーション内のリンクをクリックして新しいウィンドウを開くと、Internet Explorerが開きます。これらのリンクをデフォルトのブラウザで開くようにする方法はありますか?それとも私のコンピュータに何か問題がありますか?

私の問題は私がアプリケーションでウェブブラウザを持っているということです、それであなたがグーグルに行って、そして「スタックオーバーフロー」をタイプしそして最初のリンクを右クリックしてそれをIEで開くと言うと言いなさいChromeのこれは私が不適切にコーディングしたものですか、それとも私のコンピューター上で正しくない設定がありますか?

===編集===

これは本当に厄介です。私はブラウザがIEであることをすでに知っていますが、私は以前にうまく動いていました。リンクをクリックすると、クロムで開きました。私はc#expressを起動させることができなかったので、当時アプリケーションを作るためにsharp開発を使用していました。私は新鮮なwindowsインストールをしました、そして、私は私のアプリケーションであまり遠く離れていなかったので、私は最初からやり直すことにしました、そして今、私はこの問題を抱えています。それが私のコンピュータかどうか私にはわからないのです。単にデフォルトのブラウザで新しいリンクを開くのではなく、リンクがクリックされたときにIEがブラウザ全体を起動するのはなぜですか?

222
Sean

あなただけ書くことができます

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

EDITWebBrowserコントロールはIEの埋め込みコピーです。
したがって、その中のリンクはすべてIEで開きます。

この動作を変更するには、Navigatingイベントを処理します。

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

それはあなたの問題を解決するはずです

33
user2193090

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("cmd", $"/c start {url}") { CreateNoWindow = true });
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            Process.Start("xdg-open", url);
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
        {
            Process.Start("open", url);
        }
        else
        {
            throw;
        }
    }
}
25
Joel Harkes

あなたはここで述べたようにProcessを試しましたか? 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);
}
12
Andreas

GeckoFXコントロール を見てください。

GeckoFXは、Mozilla Gecko(Firefox)をあらゆる.NET Windowsフォームアプリケーションに簡単に埋め込むことができるオープンソースのコンポーネントです。 GeckoFXは、すっきりした、完全にコメントが記述されたC#で書かれており、デフォルトのInternet ExplorerベースのWebブラウザコントロールに代わるものです。

5
THE DOCTOR

これ、古い学校のやり方を試してください;)

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

openit( "www.google.com");

3
Moh.Kirkuk

これは私にとってデフォルトを開いた:

System.Diagnostics.Process.Start(e.LinkText.ToString());
3
Xero Phane

現在のバージョンのExplorerでレジストリを更新します。
@ "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"

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);
0
dfgv

動的に開く

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

UWPでは:

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

Process.Start(URL)を使用するとdotnet coreはエラーをスローします。次のコードはdotnet coreで動作します。 Chromeの代わりに任意のブラウザを追加できます。

var processes = Process.GetProcessesByName("Chrome");
var path  = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path,  url);
0