ユーザーの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は通常のプログラムに関連付けられていると確信しています。
これに対する解決策はありますか?どんな助けも大歓迎です。
Cmd.exeを実行する必要があります
var proc = Process.Start(@"cmd.exe ",@"/c C:\Users\user2\Desktop\XXXX.reg")
/ cを忘れないでください
UseShellExecute
のProcessStartInfo
プロパティをtrueに設定することもできます
var p = new Process();
p.StartInfo = new ProcessStartInfo(@"C:\Users\user2\Desktop\XXXX.reg")
{
UseShellExecute = true
};
p.Start();
here で文書化されているように、.net Coreの変更のようです。
UseShellExecuteをtrueに設定して、これとパスをProcessStartInfoオブジェクトに含めることができます。
Process.Start(new ProcessStartInfo((@"C:\Users\user2\Desktop\XXXX.reg") { UseShellExecute = true });