当我执行以下代码行时:
Process.Start("microsoft-edge:");
或
Process.Start("microsoft-edge:http://localhost");
它给了我这个错误:
System.ComponentModel.Win32Exception:'系统找不到指定的文件。'
当我使用 Win + R 运行microsoft-edge:
时,它会起作用。
我正在使用.netcore 3.0.0-preview6-27804-01
知道为什么会这样吗?
编辑:
这些也不起作用:
Process.Start(@"c:\Windows\System32\LaunchWinApp.exe:http://localhost");
Process.Start(@"http://localhost");
系统上的所有其他可执行文件都可以工作。
这也可以,但是我不能用它打开特定的网页
Process.Start("explorer", @"shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge");
答案 0 :(得分:2)
您不能简单地打开带有预期呼叫Process.Start("url");
的网址
您必须创建一个ProcessStartInfo
并将您的浏览器和url作为参数传递:
Process.Start(new ProcessStartInfo("cmd", $"/c start microsoft-edge:http://localhost") { CreateNoWindow = true });
(edit)需要使用ProcessStartInfo
,因为我们需要设置其CreateNoWindow = true
以防止cmd窗口出现。
但是由于此代码不仅可以在Windows机器上运行,所以我考虑使用更跨平台的东西,例如(https://brockallen.com/2016/09/24/process-start-for-urls-on-net-core/):
public void OpenBrowser(string url)
{
try
{
Process.Start(url);
}
catch
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Process.Start("xdg-open", url);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
Process.Start("open", url);
}
else
{
throw;
}
}
}
并用OpenBrowser("http://localhost");
答案 1 :(得分:1)
此处显示了确切的根本原因:https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.useshellexecute?view=netframework-4.8
“默认值在.NET Framework应用程序中为true,在.NET Core应用程序中为false。”
这意味着直接的解决方案是设置UseShellExecute。除了使显式Process对象修改设置外,以下内容与原始内容基本相同。
Process pWeb = new Process();
pWeb.StartInfo.UseShellExecute = true;
pWeb.StartInfo.FileName = "microsoft-edge:http://localhost";
pWeb.Start();
请@Lex Li和@Bizhan提出导致此解决方案的意见。
答案 2 :(得分:1)
这种变化似乎也可以完成工作:
Process.Start(new ProcessStartInfo("msedge") {
UseShellExecute = true,
Arguments = "http://localhost" });
它避免了microsoft-edge:<url>
语法的怪异,从而允许以常规方式传递更多chrome arguments。
如果有人知道避免这种情况的原因,请大声说:)
答案 3 :(得分:0)
Windows Run
窗口( Win + R )知道如何将“ microsoft-edge:
”解析为可执行路径。通过Run
窗口调用它时,它首先解析为路径。然后执行该路径中的实际可执行文件。
对于Process.Start
,没有这种路径解析。它仅查找某些路径,例如应用程序路径或PATH
变量。显然,它找不到要运行的可执行文件,因此也没有错误。
如果您的系统中使用引号声明了路径变量,那么在该位置启动任何进程时,必须完全限定该路径。否则,系统将找不到路径。例如,如果c:\ mypath不在您的路径中,并且使用引号将其添加:path =%path%;“ c:\ mypath”,则启动它时必须完全限定c:\ mypath中的任何进程。
请注意,此重载不允许使用命令行参数:
此重载不允许该进程使用命令行参数。如果需要为进程指定一个或多个命令行参数,请使用Process.Start(ProcessStartInfo)或Process.Start(String,String)重载。