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

.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 的错误,提示系统找不到指定的文件。

发布时间:2024-10-24
其他阅读

Linux查看版本信息

介绍几种查看 Linux 版本的方法,方便在使用 Linux 时快速定位自己的系统版本,使用合适的工具。

查看原文

Angular 中跨分模块后路由复用问题

当我们的 Angular 应用越来越大后,就需要考虑使用模块或者直接使用库来将解体应用,使用时进来懒加载,加快访问速度。当跨分模块后,普通的路由复用策略就是失效,需要额外的解决方法。

查看原文

Linux中查看,添加,修改,删除用户和用户组

将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。某个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,登录时所属的为默认组,而其他组称为附加组。本文将会介绍在 Linux 中查看,添加,修改,删除用户和用户组,注意:权限管理非常重要,可能一不小心就导致系统无法登录,请谨慎操作

查看原文

使用Cherry Studio搭配DeepSeek构建知识库

上篇文章,介绍了怎么在本地部署DeepSeek大模型服务,但是仅限于对话聊天,本文在之前的基础上,用DeepSeek搭配上Cherry Studio来构建个人知识库。

查看原文

Angular使用路由复用实现单页多窗(Tab)

我们在开发后台管理系统时,一个很重要的需求就是多窗口编辑,来回切换使用。一种思路是使用iframe来记录多个多页面展示,本文通过Angular路由复用来实现这一需求。

查看原文