Javascript External Library

2019-11-25

Windows 10 の標準ブラウザの取得 (c#)

.NET Standard 2.1が使えるようになったので、ライブラリを更新しました。
そうすると、System.Diagnostics.Process クラス の Start メソッドの挙動が変わってしましました。
具体的には string 型でURLを渡すと標準ブラウザが起動してくれいたのが、Win32Exception が発生するようになってしまってました。
標準ブラウザが起動しないとOAuth2認証が困るのですが・・・

パラメータ付きで起動することはできるので、実行ファイルのパスさえわかればなんとかなりそうです。ちなみに、explorer.exe にURLをパラメータとして私もOKですが、OAuth2認証のように長いクエリストリング付きのものはうまく行かない。

Windows10 の標準ブラウザはレジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice」にProgIdが保存されています。
更に、ProgIdは「HKEY_CLASSES_ROOT\{ProgId}\shell\open\command」の規定に実行ファイルのパスが記載されています。

以上を踏まえまして
string progId = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
 @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice",
 false)
 .GetValue("ProgId")
 .ToString();
string command = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(
 string.Format(@"{0}\shell\open\command", progId),
 false)
 .GetValue(null)
 .ToString()
 .Replace("%1", "{0}");
Process.Start(string.Format(command, "https://www.lutheta.jp/"));
こんな感じでしょうか。面倒になったなあ。

0 件のコメント:

コメントを投稿