web-dev-qa-db-ja.com

.Net Core 2.0 Process.Startが「指定された実行可能ファイルは、このOSプラットフォームの有効なアプリケーションではありません」をスローします

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

。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をインストールする必要があります。 NET Coreバージョンは必要ありません。

例外は、Visual Studioのデバッグ実行とwin-x86 SCDとして公開された場合の両方でスローされます。私のPCはWin7 64ビットであり、通常のWindows PCと同様に、.regと.msiは通常のプログラムに関連付けられていると確信しています。

これに対する解決策はありますか?どんな助けも大歓迎です。

20
user3187356

Cmd.exeを実行する必要があります

var proc = Process.Start(@"cmd.exe ",@"/c C:\Users\user2\Desktop\XXXX.reg")

/ cを忘れないでください

10
owairc

UseShellExecuteProcessStartInfoプロパティをtrueに設定することもできます

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

here で文書化されているように、.net Coreの変更のようです。

28
Mathew

UseShellExecuteをtrueに設定して、これとパスをProcessStartInfoオブジェクトに含めることができます。

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