2019年06月17日
川俣晶の縁側ソフトウェア技術雑記total 1463 count

.NET Coreで関連付けられたアプリを起動できない【改訂版】

Written By: 川俣 晶連絡先

 かずきさんのご教示により、問題の詳細と対策が分かったので改訂版を作成しました。

問題 §

 .NET Coreで以下のコードが実行できない。

System.Diagnostics.Process.Start("c:\\delme\\delme1.txt");

原因 §

 ProcessStartInfo.UseShellExecute Propertyのドキュメントに"The default is true on .NET Framework apps and false on .NET Core apps."と明示されているように、プロセス起動処理設定の初期値が異なっている模様。.NET Frameworkと.NET Coreの明示された非互換性である。

解決 §

 ProcessStartInfo.UseShellExecute Propertyの初期値を明示的に指定する。たとえば以下のように指定する。

var startInfo = new System.Diagnostics.ProcessStartInfo("c:\\delme\\delme1.txt");

startInfo.UseShellExecute = true;

System.Diagnostics.Process.Start(startInfo);

 ただし、全てのプラットフォームに指定できるわけではない。たとえば、UWPで指定するとPlatformNotSupportedExceptionが発生することがドキュメントで明示されている。(もっとも、一般開発者には利用が許されない機能になるらしく、そもそも指定することすらできない模様)

 それ以前に、Linux、MacOS、Nano ServerではProcess.Start Methodそのものが動作せずPlatformNotSupportedExceptionになるケースがある。

 そのため、これは【こう書き換えれば必ず動く】という解決策ではない。

オマケ §

「.NET Frameworkと.NET Coreの非互換性は割といっぱいある。.NET CoreがWinFormやWPFをサポートしたと主張したって、実際にコンパイルすると足りない機能が山ほどあって簡単に既存のソース資産を移動できるようなものではなかったから、さくっと.NET Coreに夢を見るのをやめた」

「それと本件にどんな関連があるんだい?」

「うん、非互換性は主に【無い】という形で現れてきた。だから、設定初期値が違うという状況は盲点だった」

「なるほど。君が想定したより根深い問題があるわけだね」

「結局、一番タチが悪いのは同じ名前の機能はあるのに値が違うというケース。無いものは互換レイヤーを挟んで何とか互換を取る方法があるが、名前が同じだとトラブルが起きているのに原因がとても分かりにくくなる」

「こんな非互換性が平然とあって、.Frameworkと.NETCoreを統合して.NET 5が素直に成立するのか?」

「さあ。それをおいらに聞かれても分からない」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2019年
06月
24日
Path.GetDirectoryNameの研究
3days 62 count
total 1198 count
【技術雑記】の前のコンテンツ
2019年
05月
24日
.NET Coreで関連付けられたアプリを起動できない
3days 1 count
total 1912 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20190617143252
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.