相关疑难解决方法(0)

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

我需要使用与用户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一样.

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

c# win32exception .net-core

22
推荐指数
4
解决办法
1万
查看次数

在默认图像查看器中打开和关闭图像

我正在尝试创建一个在默认图像查看器中打开图像的简短方法,并在time几毫秒后关闭它.

现在它看起来像这样:

    public static async void OpenImage(string path, int time)
    {
        var process = new Process();
        process.StartInfo.FileName = path;
        process.Start();
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到图像,但随后process.Kill()抛出InvalidOperationException"没有进程与此对象相关联".

我错过了什么或者还有其他办法吗?


更新:

现在也测试了这个:

    public static async void OpenImage(string path, int time)
    {
        var process = Process.Start(path)
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

但后来Process.Start()回归null.所以也许我必须.exe直接打电话给faljbour评论?

c# process

0
推荐指数
1
解决办法
3464
查看次数

标签 统计

c# ×2

.net-core ×1

process ×1

win32exception ×1