2017年10月23日
川俣晶の縁側ソフトウェア技術雑記 total 3766 count

.NET CoreのProcess.Start経由でデータファイルを開くことができない問題

Written By: 川俣 晶連絡先

問題 §

System.Diagnostics.Process.Start(path);で、パスがテキストファイルの時、.NET F/Wだと関連付けされたテキストエディタで開くが、.NET Core 2.0だと例外で落ちる。

解決 §

System.Diagnostics.Process.Start(path,args);の形式を使い、第1引数には実行ファイルを指定する。テキストファイルのパスは第2引数に設定する。(関連付けの設定に従ってアプリを起動するという機能性は実現できない)

解決2 (2022/02/08追記) §

System.Diagnostics.Process.Start(path,args);の形式を使い、第1引数には"cmd.exe"を指定し、第2数には"/c (起動したいデータファイル名)"を指定する。ただし起動されるのはcmd.exeなので、完全に互換ではない。

解決3 (2022/10/27追記) §

 UseShellExecuteプロパティを使う。

        ProcessStartInfo pi = new ProcessStartInfo()

        {

            FileName = "http://localhost:8080/",

            UseShellExecute = true,

        };

        Process.Start(pi);

原因 §

不明 (ファイルの関連付けという概念が存在しないOSでも動作させようと思うなら、同じことはできないのだろう……とは推測できる)

感想 §

「.NET Coreはいろいろな点で機能的に見劣りすると思っていたが、ここもそうだな」

「対応OSのミニマムセットにしか作れないわけだね」

「まあ、対応プラットフォームを増やそうとして機能が減ったJ●v●という悪夢の前例はあるから驚かないがな」

「LinuxやMacでも動くから嬉しい!……は、もし動いたらの話……ということだね」

「そうだな。機能が足りないから.NET Coreに移行できません……ということなら、そもそも動かないわけだ」

「で、そもそも.NET Coreの評価はどうなんだい?」

「そこを現在検証中だ。部分的に……ではあるがな」

「検証作業中に、偶然こういう問題に気付いてしまったわけだね」

「そうそう。.NET F/W用のコードを丸ごと持ち込んで比較のために.NET Coreで動作させようとしたら例外が起きて発覚した」