在不使用 ShellExecute 的情况下启动带有特定网页的浏览器的方法? (视觉 C++)

Way to launch a browser w/ specific webpage without using ShellExecute? (Visual C++)

我想在我的可视化 C++ 表单中添加一个按钮,该按钮将在特定浏览器中打开。到目前为止,我一直在使用的链接:

System::Diagnostics::Process::Start("UrlHere")

作为标准,无论您的默认浏览器是什么,它都会打开。

我想知道强制 URL 使用特定浏览器打开的过程是什么,如果不使用 ShellExecute 是否可行?

编辑 - 你是对的,这是 C++/CLI。删除了 C++ 标记。

编辑 编辑 - 如果造成误导,我们深表歉意。一些细微的阐述;

按钮将启动到应用程序 URL,其中一些只能在 Internet Explorer 中使用,其他的可以(并且应该)在 Chrome 中使用。这就是为什么我需要避免使用默认浏览器并在启动时使用不同的按钮使用不同的浏览器 URLs

在回答 'how' 之前,我想问一个问题 "should you be implementing this?"

  • 不启动用户的默认浏览器,就是在颠覆用户的决定。
    • 也许用户更喜欢特定的界面,并且愿意忍受随之而来的错误渲染。
    • 也许用户有他们真正需要的浏览器插件,例如盲人屏幕 reader。
  • 您需要安装用户可能需要或不需要的附加软件。
    • 也许用户不想要Chrome。也许用户更喜欢 FireFox。
  • 你是说你知道哪个浏览器是最好的,从现在到永远。
    • 如果下一个版本的 IE 可以与当前 Chrome-only 的网站一起使用怎么办?如果 Chrome 的下一个版本修复了目前仅支持 IE 的网站怎么办?
    • 如果站点发生变化以便在更多浏览器中运行怎么办?
    • 你会回去发布一个新版本的软件来改变特定网站的浏览器吗?
  • 您正在尝试解决一个可能已经解决的问题。
    • Chrome 和 Firefox 都支持将使用 IE 引擎呈现选项卡的插件。它可以设置为在看到某些 URL 时自动激活。
    • 也许有一个浏览器已经适用于您的所有网站,只是您不知道。

因此,我的建议是不,不要这样做。用户已经决定了他们想要使用哪个浏览器,请尊重该决定并使用默认浏览器。

话虽如此,您可以这样做:您可以使用 CreateProcess method, but you're in managed-land, so you might as well use it. Use the Process class 为您启动新进程。

Process^ browserProcess = gcnew Process();
browserProcess->StartInfo->UseShellExecute = false;
browserProcess->StartInfo->FileName = "C:\Program Files (x86)\Internet Explorer\iexplore.exe";
browserProcess->StartInfo->Arguments = "http://www.google.com";
browserProcess->Start();