欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# .Net Core 3.1 中关于Process.Start 启动Url链接的问题

程序员文章站 2022-11-22 09:58:36
WPF 项目迁移到.Net Core中时居然出了一堆问题...(很无语) 今天在使用的时候居然发现Process.Start居然打不开Url链接了? 报 找不到指定文件 的异常?! 一、bug重现 首先以.Net Core 3.1框架 中一个Console项目 打开百度为例: 运行然后你就会得到: ......

wpf 项目迁移到.net core中时居然出了一堆问题...(很无语)

今天在使用的时候居然发现process.start居然打不开url链接了? 报 找不到指定文件 的异常?!

一、bug重现

首先以.net core 3.1框架 中一个console项目  打开百度为例:

C# .Net Core 3.1 中关于Process.Start 启动Url链接的问题

 

 运行然后你就会得到:

C# .Net Core 3.1 中关于Process.Start 启动Url链接的问题

 

 纳闷的是,这种方法打开url在.net framework中是没问题的..

 

二、解决方法

方案一:使用windows系统自带的资源管理器来打开url

process.start("explorer", "https://www.baidu.com");

你就可以得到一个浏览器窗口,打开着百度网页..

但是如果你的url复杂一点的话,例如打开百度搜索what

process.start("explorer", "https://www.baidu.com/s?wd=what");
explorer表示不干,并直接给你抛了个文件管理器窗口

所以这个方法只可以用于打开简单的url...

方案二:使用cmd中的start命令 可以打开任意形式的url
string url = "https://www.baidu.com/s?wd=what";
process p = new process();
p.startinfo.filename = "cmd.exe";
p.startinfo.useshellexecute = false;    //不使用shell启动
p.startinfo.redirectstandardinput = true;//喊cmd接受标准输入
p.startinfo.redirectstandardoutput = false;//不想听cmd讲话所以不要他输出
p.startinfo.redirectstandarderror = true;//重定向标准错误输出
p.startinfo.createnowindow = true;//不显示窗口
p.start();

//向cmd窗口发送输入信息 后面的&exit告诉cmd运行好之后就退出
p.standardinput.writeline("start "+url + "&exit");
p.standardinput.autoflush = true;
p.waitforexit();//等待程序执行完退出进程
p.close();

ok

 

以上的问题我只在windows平台上找到过,不知linux和osx有没有...

 

thanks