Процесс .Net Core 2.0.Старт выдает "указанный исполняемый файл не является действительным приложением для этой платформы ОС "

мне нужно .reg file и a .msi-файл выполняется автоматически, используя любые исполняемые файлы этих двух типов файлов, связанных с Windows пользователя.

процесс .NET Core 2.0.Пуск (строковое имя файла) docs говорит: "имя файла не должно представлять исполняемый файл. Это может быть любой тип файла, для которого расширение было связано с приложением, установленным в системе."

using(var proc = Process.Start(@"C:Usersuser2DesktopXXXX.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. Мой компьютер-Win7 64bit, и я уверен .reg и .msi связаны с обычными программами, как обычно Windows PC делает.

есть ли решение для этого? Любая помощь приветствуется.

2 ответов


вы должны Выполнить cmd.exe

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

не забудьте /c


вы также можете установить UseShellExecute собственность ProcessStartInfo истина

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

кажется, изменение в .net Core, как документировано здесь.