C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?
原文:C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?
在 .NET 中创建进程时,可以传入 ProcessStartInfo 类的一个新实例。在此类型中,有一个 UseShellExecute 属性。
本文介绍 UseShellExecute 属性的作用,设为 true 和 false 时,分别有哪些进程启动行为上的差异。
本质差异
Process.Start 本质上是启动一个新的子进程,不过这个属性的不同,使得启动进程的时候会调用不同的 Windows 的函数。
UseShellExecute = true- 调用的是 ShellExecute
UseShellExecute = false- 调用的是 CreateProcess
当然,如果你知道这两个函数的区别,那你自然也就了解此属性设置为 true 和 false 的区别了。
效果差异
ShellExecute 的用途是打开程序或者文件或者其他任何能够打开的东西(如网址)。
也就是说,你可以在 Process.Start 的时候传入这些:
- 一个可执行程序(exe)
- 一个网址
- 一个 html / mp4 / jpg / docx / enbx 等各种文件
- 在
PATH环境变量中的各种程序
不过,此方法有一些值得注意的地方:
- 不支持重定向输入和输出
- 最终启动了哪个进程可能是不确定的,你可能需要注意潜在的安全风险
而 CreateProcess 则会精确查找路径来执行,不支持各种非可执行程序的打开。但是:
- 支持重定向输入和输出
如何选择
UseShellExecute 的默认值是 true。
如果有以下需求,那么建议设置此值为 false:
- 需要明确执行一个已知的程序
- 需要重定向输入和输出
如果你有以下需求,那么建议设置此值为 true 或者保持默认:
- 需要打开文档、媒体、网页文件等
- 需要打开 Url
- 需要打开脚本执行
- 需要打开计算机上环境变量中路径中的程序
参考资料
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?的更多相关文章
- 在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION)
在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION) 没错就是这个,绿色的死亡按钮 原因: 第一种:windows ...
- Eclipse中启动tomcat时内存溢出
今天在启动自己项目的时候遇到一个永久带(permgen space)内存溢出,查找了很多资料和请教了许多大神,最终才解决问题. 一.什么原因造成了永久带溢出: 1.项目使用了太多的静态变量 2.加载了 ...
- eclipse中启动服务时提示端口被占的2种解决方案
出现类似这样的:port '19001' at localhost are already in use 第一种:在任务管理器中关闭相关eclipse进程,然后重启eclipse.这种方法可能有时候会 ...
- Anaconda中启动Python时的错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 553
今天,在Anaconda prompt启动python遇到了如下错误: UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xaf in positi ...
- Unity中启动VS时出现"Visual Studio 2010 Shell 无效的许可证数据"的解决办法
(感觉还是cnblog好一点,刚注册成功赶紧把baidu hi的一篇文章搬过来试试) 一直用着Visual Studio 2013给Unity写代码,安装了SQL Server 2014后,在Unit ...
- True 和 False 分别代表数字中的几?形象地记忆
True 和 False 作为布尔值分别代表的意思是真和假. 灯泡亮起就是 1,灯泡熄灭就是 0.0 就是无状态,所以可以代表灯泡熄灭的状态,而 1 就是有状态的,所以可以代表灯泡亮起的状态. 那么, ...
- Eclipse启动Tomcat时,45秒超时解决方案
在Eclipse中启动Tomcatserver时,常常因为系统初始化项目多,导致出现45秒超时的Tomcatserver启动错误,出现以下的错误. 曾经我们一般通过找到XML配置文件,将相应Timeo ...
- Android动态部署五:怎样从插件apk中启动Service
转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51072332 github地址:https://github.com/ximsfei/Dy ...
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
一个mysql jdbc待解之谜 关于jdbc url参数 allowMultiQueries 如下的一个普通JDBC示例: String user ="root"; Strin ...
随机推荐
- MYSQL避免重复插入记录的三种方法
方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into table_name(ema ...
- FZU Monthly-201909 获奖名单
FZU Monthly-201909 获奖名单 冠军: 空缺 一等奖: 张咏真 S031802540 孔铖晗 S031802115 二等奖: 苏锦程 S031802325 林柄灿 S031802117 ...
- Kibana数据可视化
Kibana数据可视化 1,3.1使用logstash导入数据的问题 会出现错误提示: [location] is defined as an object in mapping [doc] but ...
- PHP系列 | [转] PHP中被忽略的性能优化利器:生成器
官方:https://www.php.net/manual/zh/language.generators.overview.php 原文:https://segmentfault.com/a/1190 ...
- 我的Mac上有哪些软件
工具 Pycharm CE GoLand Chrome 微信 网易云音乐 有道云笔记 iTerm Postman Sublime Text bashrc配置(支持显示git branch以及详细路径信 ...
- Data truncation: Out of range value for column 'quanity' at row 问题解决方案
由于之前在自己电脑上搭建了mysql 5.6的数据库,但是在服务器上搭建的是mysql 5.7的环境,在运行过程中出现了如下错误: Data truncation: Out of range valu ...
- [原]使用global mapper 修改影像数据DOM的投影变换(将数据转换成osgearth支持的投影)
osgearth默认使用的投影基准面为: Geographic(Latitude/Longitude)的 WGS84 有这样一份数据需要修改: 1.在菜单栏种选择“工具”---->“配置” 2. ...
- MacOSX 虚拟机与宿主机的网络配置
环境:MacOSX.VMware Fusion11.5.CentOS6 比较重要的两个网卡 安装虚拟机后,宿主机会多出几个网卡,其中vmnet1对应的Bridge(桥接方式),vmnet8对应NAT方 ...
- 贴子详情接口偶发时延超过2s的问题
1. 发现问题 1. 查询慢access日志,发现偶尔有接口时延超过2s,发送概率1%左右 2. 排查 1. 写单元测试,多次测试后,不能重现问题 2. 接口代码里加日志,每隔 ...
- Xcode 创建使用多个 target (1)
前段时间,浏览了一个项目:手机和平板同时适配的.见识到了多个target 应用的妙处: 一个target 担任 手机开发,一个target 担任 平板开发,设计的很巧妙. 一口吃不成胖子,这篇先写 第 ...
