投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/1/22 10:43:03
> 実際にはOpenFileDialogを用いて、パスを取得し、
> SQLServerデータベースに書き込み。

クライアント側にあるファイルの絶対パスを、データベースにフルパスで記録するのは
あまり一般的では無いように思いますが…それはさておき。

今回使ったこのコードですが、実は
Process.Start(filePath)
WinFormsApp 「Windows フォーム アプリ」 の場合と
WindowsApp「Windows フォーム アプリケーション (.NET Framework)」とで
その振る舞いが異なるのです。特に、実行可能ファイルではなくドキュメントを渡した時には。

ドキュメントのパスを渡した場合、.NET Framework 版であれば、
そのまま既定のアプリで関連付け実行されますが、.NET 版ではそうではありません。

.NET Core および .NET 版の場合、既にお試しいただいたように
 The specified executable is not a valid application for this OS platform.
のエラーになってしまうでしょう。Shell 関数と同様に「実行可能ファイル」を指定せねばなりません。

Shell($"cmd.exe /C ""{filePath}""", AppWinStyle.Hide)
'Process.Start("cmd.exe", "/C ""{filePath}""") 


.NET で既定のアプリを開くには、UseShellExecute を True にする必要があります。
Process.Start(New ProcessStartInfo(filePath) With {.UseShellExecute = True})


なお下記は .NET Framework や Mono では True、.NET では False となります。
MsgBox(New ProcessStartInfo().UseShellExecute)



.NET Framework と .NET とでは、このような細かい差異が色々とありますのでご注意ください。
ゆえに質問時には、ターゲット フレームワークなどの環境情報も重要だったりします。