1. ホーム
  2. c#

[解決済み] .Net Core 2.0 Process.Start throws "The specified executable is not valid application for this OS platform".

2022-02-12 10:36:17

質問

.regファイルと.msiファイルを、ユーザーのWindows上でこれら2つのファイルタイプに関連する実行可能ファイルを使用して自動的に実行させる必要があります。

.NET Core 2.0 Process.Start(string fileName) docs と書いてあります。 ファイル名は実行可能なファイルである必要はありません。拡張子がシステムにインストールされたアプリケーションに関連付けられたファイルであれば、どのようなファイルタイプでもかまいません。

しかし

using(var proc = Process.Start(@"C:\Users\user2\Desktop\XXXX.reg")) { } //.msi also

は私に

System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform.
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start(String fileName)

ErrorCode と HResult -2147467259、NativeErrorCode 193 を指定しました。

同じコードは、.Net Framework 3.5 または 4 のコンソールアプリで動作しました。

ユーザーの環境は様々で(Windowsのバージョンも含めて)、私のコントロールの及ばないところなので、メソッドのパラメーターにexeファイルのパスを正確に指定することはできない。そのため、.Net Coreに移植する必要があり、以下のように動作させようとしています。 SCD コンソールアプリのため、特定の.Net Frameworkや.NET Coreバージョンのインストールは必要ありません。

Visual Studioのデバッグ実行時とwin-x86のSCDとして公開した時の両方で例外が発生します。私のPCはWin7の64bitですが、通常のWindows PCがそうであるように、.regや.msiは通常のプログラムに関連付けされているはずです。

解決策はあるのでしょうか?何か助かる方法があれば教えてください。

解決方法は?

を設定することもできます。 UseShellExecute のプロパティは ProcessStartInfo を真にする

var p = new Process();
p.StartInfo = new ProcessStartInfo(@"C:\Users\user2\Desktop\XXXX.reg")
{ 
    UseShellExecute = true 
};
p.Start();

.net Coreでの変更のようで、ドキュメントによると こちら .