use*_*356 22 c# win32exception .net-core
我需要使用与用户Windows上关联的这两种文件类型的任何可执行文件自动执行.reg文件和.msi文件.
.NET核2.0的Process.Start(字符串文件名)文档说:"文件名并不需要代表一个可执行文件它可以是任何一种扩展已经安装在系统上的应用程序相关的任何类型的文件."
然而
using(var proc = Process.Start(@"C:\Users\user2\Desktop\XXXX.reg")) { } //.msi also
Run Code Online (Sandbox Code Playgroud)
给我
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)
Run Code Online (Sandbox Code Playgroud)
使用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一样.
有解决方案吗?任何帮助表示赞赏.
Lia*_*iam 39
您可以将 UseShellExecute 设置为 true 并将其和您的路径包含在 ProcessStartInfo 对象中:
Process.Start(new ProcessStartInfo(@"C:\Users\user2\Desktop\XXXX.reg") { UseShellExecute = true });
Run Code Online (Sandbox Code Playgroud)
Mat*_*hew 34
您还可以将UseShellExecute属性设置ProcessStartInfo为true
var p = new Process();
p.StartInfo = new ProcessStartInfo(@"C:\Users\user2\Desktop\XXXX.reg")
{
UseShellExecute = true
};
p.Start();
Run Code Online (Sandbox Code Playgroud)
似乎是.net Core的变化,如此处所述.
Yos*_*nal 14
如果这也困扰您:
对于我们这些习惯于简单地调用Process.Start(fileName);上述语法的人来说,可能会让我们感到焦虑......所以我可以补充一下,您可以在一行代码中编写它吗?
new Process { StartInfo = new ProcessStartInfo(fileName) { UseShellExecute = true } }.Start();
Run Code Online (Sandbox Code Playgroud)
小智 11
您必须执行cmd.exe
var proc = Process.Start(@"cmd.exe ",@"/c C:\Users\user2\Desktop\XXXX.reg")
Run Code Online (Sandbox Code Playgroud)
别忘了/ c
| 归档时间: |
|
| 查看次数: |
10046 次 |
| 最近记录: |