我目前有以下代码,该代码通过 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 );
}