19

これを使用して、デフォルトのWebブラウザーのパスと実行可能ファイルを取得しています。

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;
        }

次に、Webブラウザを呼び出します。Run(DefaultWebBrowser, "foo.html")

問題は、上記の関数は、デフォルトのWebブラウザーであるInternet Explorerの代わりに、FirefoxとIE(私のPCにインストールされている2つのWebブラウザー)を呼び出すことです。これを修正する方法がわかりません。

編集

Google Chromeをダウンロードしてインストールし、デフォルトのWebブラウザーとして設定しましたが、奇妙なことに、上記のエラーは発生しません。

4

6 に答える 6

43

そのすべてのコードを次のように置き換えることができます

System.Diagnostics.Process.Start(pathToHtmlFile);

.htmこれにより、デフォルトのブラウザが自動的に起動するか、または.htmlファイルのデフォルトのハンドラーを検索して使用します。

Firefoxがデフォルトとして設定されている場合、これにより奇妙な例外が発生することがあります(Firefoxが初めて起動する場合)。そのため、Firefoxtry/catchでそれを処理することをお勧めします。

于 2012-06-12T02:06:35.100 に答える
16

.Net Coreの場合は、呼び出す必要があります(.Net Core 2.0 Process.Startで提案された「指定された実行可能ファイルはこのOSプラットフォームの有効なアプリケーションではありません」

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

試したところProcess.Start(pathToHtmlFile);System.ComponentModel.Win32Exceptionが発生しました。指定された実行可能ファイルは、このOSプラットフォームの有効なアプリケーションではありません

于 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を実行してみてください。これは私の解決策であり、外部設定を使用します。ブラウザを設定しても、OSでデフォルトに設定されているものは関係ありません。

于 2017-12-04T10:57:30.677 に答える