.Net Core 2.0 Process.Start抛出“指定的可执行文件不是此OS平台的有效应用程序”

我需要使用与用户Windows上关联的这两种文件类型的任何可执行文件自动执行.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控制台应用程序中起作用。

我不能指定精确的exe文件路径作为方法的参数,因为用户的环境是变体(包括Windows版本)并且不受我的控制。 这也是为什么我需要将程序移植到.Net Core,尝试使其作为SCD控制台应用程序工作,以便不需要安装特定的.Net Framework或.NET Core版本。

Visual Studio调试运行和发布为win-x86 SCD时都会抛出exception。 我的电脑是Win7 64bit,我确定.reg和.msi与常规程序一样,与Windows PC一样。

有解决方案吗? 任何帮助表示赞赏。

您必须执行cmd.exe

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

别忘了/ c

您还可以将ProcessStartInfoUseShellExecute属性设置为true

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

似乎是.net Core的变化,如此处所述 。