C#在私人模式下打开默认浏览器

时间:2016-06-10 07:17:50

标签: c# wpf winforms

我目前有以下代码通过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(@"HTTP\shell\open\command", false);

        //If browser path wasn't found, try Win Vista (and newer) registry key
        if (browserKey == null)
        {
            browserKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", 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的末尾添加另一个命令行以强制浏览器以私有模式打开,最终用户知道这将发生,但我不确定如何执行此操作。我想要做的浏览器是:

  • Google Chrome
  • 火狐
  • Internet Explore

e.g。

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

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

4 个答案:

答案 0 :(得分:1)

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

string BrowserName = string.Empty;
using (RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice"))
{
    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;
    }
}

答案 1 :(得分:0)

我假设您尝试从控制台或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();
}

答案 2 :(得分:0)

希望这会有所帮助,并使用Firefox和Chrome进行测试

 public static void GetPrivateBrowserPath()
    {

        //string standardBrowserPath = $@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
        string standardBrowserPath = $@"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
        string privateModeParam = string.Empty;

        if (standardBrowserPath.ToUpper().Contains("FIREFOX"))
            privateModeParam =  "-private-window";

        if (standardBrowserPath.ToUpper().Contains("CHROME"))
            privateModeParam = "-incognito";
        Process.Start(standardBrowserPath,  privateModeParam );
    }

答案 3 :(得分:0)

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

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