12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C#でブラウザを開く【.NET 5.0以降】

Last updated at Posted at 2021-06-27

#概要
.NET 5.0環境において、ブラウザアプリケーションから任意のURLを開く方法は以下の通り。

var startInfo = new System.Diagnostics.ProcessStartInfo("https://google.com/");
startInfo.UseShellExecute = true;
System.Diagnostics.Process.Start(startInfo);

もしくは

System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe", "https://google.com/");
// 第1引数にブラウザのアプリケーションの絶対パス、第2引数にURL

#以下、時間のある方向け
 曖昧な箇所あり。ご了承お願い致します。

##遭遇した事象
 以下のコードで、windowsコンソールアプリからブラウザを開くことができなかった。

System.Diagnostics.Process.Start("https://google.com/");

遭遇したエラーはWin32Exception

ちなみに環境は以下の通り
・Windows10 Home
・Visual Studio Community 2019
・.NET 5.0

##エラー理由
.NET Core 2.1以降、つまり.NET Core 3.1や、.NET 5.0において、StartInfo.UseShellExecuteの既定値の変更が行われていることが原因。.NET Framework(少なくとも4.7.2)では規定値がtrueだが、.NET 5.0や.NET Core 2.1以降ではfalseとなっている。

StartInfo.UseShellExecuteについて
・trueの場合
 システムにインストールされているアプリケーションに関連付けられている拡張子のファイルであれば、
 ファイル名を指定するだけでアプリケーションを起動できる。
 例:引数にhoge.txtを指定 → メモ帳アプリで指定したtxtファイルを開く
・falseの場合
 実行可能形式であるファイル名を指定し、プロセスを作成する。
 ※URLは実行可能形式ではないため、ここでエラーが発生する。

##解決策
StartInfo.UseShellExecuteプロパティを自分でtrueに設定する。

var startInfo = new System.Diagnostics.ProcessStartInfo("https://google.com/");
startInfo.UseShellExecute = true;
System.Diagnostics.Process.Start(startInfo);

もしくは

System.Diagnostics.Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe", "https://google.com/");
// 第1引数にブラウザのアプリケーションの絶対パス、第2引数にURL

場合によっては、前者を共通関数みたいにしてしまうのがいいかなぁと、素人なりに思った。

対象環境

.NET 5.0 以降
.NET Core 2.1, 3.1 以降

##参考文献
https://uchukamen.com/Programming1/Process/

12
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?