2017-10-18 1410 views
2

我需要讓一個.reg文件和一個.msi文件自動使用與這兩種文件類型關聯的任何可執行文件執行用戶的Windows。.Net Core 2.0 Process.Start拋出「指定的可執行文件不是此OS平臺的有效應用程序」

.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) 

與錯誤碼和的HResult -2147467259,和NativeErrorCode 193

相同的代碼在.Net框架沒有工作3.5或4控制檯應用程序。

由於用戶的環境是變體(包括Windows版本)並且不受我的控制,我無法指定確切的exe文件路徑作爲方法的參數。這也是爲什麼我需要將程序移植到.Net Core,試圖使其作爲SCD控制檯應用程序工作,以便不需要安裝特定的.Net Framework或.NET Core版本。

在Visual Studio調試運行和以win-x86 SCD發佈時都會引發異常。我的電腦是Win7 64bit,我確信.reg和.msi與平常的Windows PC一樣,與常規程序相關聯。

是否有解決方案?任何幫助表示讚賞。

回答

1

,你必須執行CMD.EXE

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

不要忘記/ C

1

您還可以將ProcessStartInfoUseShellExecute屬性設置爲true

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

似乎在.net Core中進行更改,如文檔here所述。

相關問題