新版本.Net关于Process.Start的问题

发布时间:2024-10-24

.Net 开发中,试用 Process.Start() 来启动一个新进程,当我们传入的是具体文件或者链接的时候,系统也会根据默认打开方式打开对应的进程。但是在新版本的 .Net 中,试用 Process.Start() 来打开文件或者链接的时候,会抛出 System.ComponentModel.Win32Exception 的错误,提示系统找不到指定的文件。

解析

这和 Windows API 相关,在 Windows API 中对于启动进程有两个方法 CreateProcess/CreateProcessAShellExecute/ShellExecuteA ,分别用来响应 直接通过程序名来启动进程通过默认打开方式启动进程并且打开文件

.Net Framework 的运行时中,Process.Start() 可以做到两种启动进程方式都能正确响应,但是在 .Net 中,必须为 通过默认打开方式启动进程并且打开文件 显式地去指定 UseShellExecute = true ,这样运行时才会通过ShellExecute/ShellExecuteA 的方式,从用户的系统设置中,找到匹配的默认打开方式,进而启动对应的进程。不然运行时会调用 CreateProcess/CreateProcessA 启动传入的文件名,但是由于传入的属于存档文件或者超链接,就会抛出 System.ComponentModel.Win32Exception 的错误,提示系统找不到指定的文件。

其他阅读

WPF使用云母材质

在最新的Windows 11 OS中,微软为流畅设计(Fluent Design)带来了新的云母材质,云母材质一种不透明的动态效果,微软将其作为Windows 11应用窗体的默认材质。

查看原文

C#获取电脑的网卡地址

使用C#开发Windows应用,需要进行特定网卡绑定的时候我们需要获取电脑本机的网卡地址,本文会介绍几种获取电脑网卡地址的方法。

查看原文

Winform中设置控件边框

本文将会介绍在Winform中如何设置控件的边框,可应用于Form和Panel等。

查看原文

C#本质论7.0

《C#本质论》是C#最权威、最值得尊重的参考书之一,作者为此付出了非凡的努力!Mark Michaelis的《Essential C#》系列多年来一直是畅销经典。

查看原文

西华湿地公园

昆明周末好去处。

查看原文