.NET Frameworkでは、Process.Start("https://www.google.co.jp/")
とかやると、既定のブラウザが勝手に開いてGoogleのページを開いてくれたもんなんですが、.NET Coreではそれはできなくなったっぽい。
System.ComponentModel.Win32Exception: 指定されたファイルが見つかりません。 at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
プラットフォームに依存するような動作はやめますってことなのかな。
で、すでに対策を考えてくれていた方がいました。
Process.Start for URLs on .NET Core
//string url try { Process.Start(url); } catch { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { //Windowsのとき url = url.Replace("&", "^&"); Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true }); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { //Linuxのとき Process.Start("xdg-open", url); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { //Macのとき Process.Start("open", url); } else { throw; } }
とりあえずWindows環境では動くことを確認。
& をエスケープしてるのは、シェルがそこをコマンドの切れ目と認識しちゃうかららしい。