C# 在专用模式下打开默认浏览器



我目前有以下代码,该代码通过 WPF 应用程序上数据网格中的按钮启动:

private static string GetStandardBrowserPath()
{
    string browserPath = string.Empty;
    RegistryKey browserKey = null;
    try
    {
        //Read default browser path from Win XP registry key
        browserKey = Registry.ClassesRoot.OpenSubKey(@"HTTPshellopencommand", false);
        //If browser path wasn't found, try Win Vista (and newer) registry key
        if (browserKey == null)
        {
            browserKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttp", false); ;
        }
        //If browser path was found, clean it
        if (browserKey != null)
        {
            //Remove quotation marks
            browserPath = (browserKey.GetValue(null) as string).ToLower().Replace(""", "");
            //Cut off optional parameters
            if (!browserPath.EndsWith("exe"))
            {
                browserPath = browserPath.Substring(0, browserPath.LastIndexOf(".exe") + 4);
            }
            //Close registry key
            browserKey.Close();
        }
    }
    catch
    {
        //Return empty string, if no path was found
        return string.Empty;
    }
    //Return default browsers path
    return browserPath;
}

这将返回浏览器路径,如下所示:

"c:\program files\mozilla firefox\firefox.exe -osint -url %1"

我想做的是在.exe末尾添加另一个命令行以强制浏览器以私人模式打开,最终用户知道这会发生,但我不确定如何做到这一点。我想这样做的浏览器是:

  • 谷歌浏览器
  • 火狐
  • 歌剧
  • 互联网探索

例如

"c:\program files\mozilla firefox\firefox.exe -private -osint -url %1"

"c:\program files (x86)\google\chrome\application\chrome.exe -incognito -- %1"

请尝试以下code,即使使用默认浏览器打开特定url,即使使用private mode

string BrowserName = string.Empty;
using (RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttpUserChoice"))
{
    if (userChoiceKey == null)
    {
        BrowserName = "UNKNOWN";
    }
    object progIdValue = userChoiceKey.GetValue("Progid");
    if (progIdValue == null)
    {
        BrowserName = "UNKNOWN";
    }
    switch (progIdValue.ToString())
    {
        case "IE.HTTP":
            BrowserName = "INTERNETEXPLORER";
            break;
        case "FirefoxURL":
            BrowserName = "FIREFOX";
            break;
        case "ChromeHTML":
            BrowserName = "CHROME";
            break;
        default:
            BrowserName = "UNKNOWN";
            break;
    }
    string url = "http://www.google.com";
    switch (BrowserName)
    {
        case "INTERNETEXPLORER":
            System.Diagnostics.Process.Start("iexplore.exe", "-private " + url);
            break;
        case "FIREFOX":
            System.Diagnostics.Process.Start("firefox.exe", "-private-window " + url);
            break;
        case "CHROME":
            System.Diagnostics.Process.Start("chrome.exe", "-incognito " + url);
            break;
        case "UNKNOWN":
            System.Diagnostics.Process.Start("iexplore.exe", "-private " + url);
            break;
    }
}

这是我使用其他人帖子中的元素的最终工作代码:

private void LaunchURLButton_Click(object sender, RoutedEventArgs e)
{
    object url = ((Button) sender).CommandParameter;
    string privateModeParam = string.Empty;
    string UrlFromDb = (string) url;
    string browserName = GetDefaultBrowserPath();
    if (string.IsNullOrEmpty(browserName))
    {
        MessageBox.Show("no default browser found!");
    }
    else
    {
        if (browserName.Contains("firefox"))
        {
            privateModeParam = " -private-window";
        }
        else if ((browserName.Contains("iexplore")) || (browserName.Contains("Opera")))
        {
            privateModeParam = " -private";
        }
        else if (browserName.Contains("chrome"))
        {
            privateModeParam = " -incognito";
        }
        Process.Start(browserName, $"{privateModeParam} {UrlFromDb}");
    }
}

我假设您正在尝试从控制台或 Windows 窗体或 WPF 应用程序运行它?可以使用 .Net Process执行此操作。像这样:

var targetSite= "<website you want to open>";
using (var process = new Process())
{
    // Get Default Browser from Registry here
    // see http://stackoverflow.com/questions/13621467/how-to-find-default-web-browser-using-c
    switch (browserType)
    { 
          case "Chrome":
             process.StartInfo.FileName = @"<path to your chrome browser exe>";
             process.StartInfo.Arguments = url + " --incognito";
             break;
          case "Mozilla":
             ...... 
          default: 
            // Open in IE?

    process.Start();
}

希望这有帮助,用火狐和铬测试了它

 public static void GetPrivateBrowserPath()
    {
        //string standardBrowserPath = $@"C:Program Files (x86)GoogleChromeApplicationchrome.exe";
        string standardBrowserPath = $@"C:Program Files (x86)Mozilla Firefoxfirefox.exe";
        string privateModeParam = string.Empty;
        if (standardBrowserPath.ToUpper().Contains("FIREFOX"))
            privateModeParam =  "-private-window";
        if (standardBrowserPath.ToUpper().Contains("CHROME"))
            privateModeParam = "-incognito";
        Process.Start(standardBrowserPath,  privateModeParam );
    }

最新更新