dotnet 启动进程传入不存在的文件夹作为工作目录行为变更
本文记录在 dotnet 下,启动进程,传入不存在的文件夹作为进程的工作目录,分别在 .NET Framework 和 .NET Core 的行为
在 dotnet 6 下,可以使用 ProcessStartInfo 辅助创建 Process 进程,如以下代码进行测试,传入不存在的 Z:\Windows 文件夹
Console.WriteLine($"Fx {Environment.CurrentDirectory}");
if (args.Length > 0)
{
return;
}
var location = Assembly.GetExecutingAssembly().Location;
var fileName = Path.GetFileNameWithoutExtension(location);
var directory = Path.GetDirectoryName(location);
var exe = Path.Combine(directory, fileName + ".exe");
var processStartInfo = new ProcessStartInfo(exe,"fx")
{
WorkingDirectory = "Z:\\Windows"
};
var process = Process.Start(processStartInfo);
运行将会在 Process.Start 方法上抛出 System.ComponentModel.Win32Exception 说 目录名称无效
如果是在英文环境下,将会提示 The directory name is invalid 从而失败
但如果没有设置 ProcessStartInfo 的 WorkingDirectory 工作路径,那么默认将使用当前进程的 Environment.CurrentDirectory 值作为启动进程的工作路径
在 .NET Core 和 .NET Framework 下,启动时,设置 UseShellExecute 分别为 true 和 false 的值,行为有所不同。在不设置 ProcessStartInfo 的 WorkingDirectory 工作路径,让新的进程默认使用 Environment.CurrentDirectory 工作文件夹。但是此工作路径是一个被插拔的 U 盘的路径,如以下代码
Environment.CurrentDirectory = @"I:\";
var exe = Path.Combine(directory, fileName + ".exe"); // 执行到这句代码的时候,拔出 U 盘,让 I:\ 不存在
var processStartInfo = new ProcessStartInfo(exe, "fx")
{
UseShellExecute = true, // 也设置为 false 的值
};
var process = Process.Start(processStartInfo);
process.WaitForExit();
我使用 .NET 6 和 .NET Framework 4.5 进行分别的测试,测试如下:
在 .NET Core 下,设置 UseShellExecute=false 的值,运行结果是:成功,新进程工作路径等于 I:\ 路径
在 .NET Core 下,设置 UseShellExecute=true 的值,运行结果是:成功,新进程工作路径等于 C:\Windows 路径
在 .NET Framework 下,设置 UseShellExecute=false 的值,运行结果是:运行 Process.Start 失败,提示 System.ComponentModel.Win32Exception: '目录名称无效。' 错误
在 .NET Framework 下,设置 UseShellExecute=true 的值,运行结果是:成功,新进程工作路径等于 C:\Windows 路径
更多请看 c# - Win32Exception: The directory name is invalid - Stack Overflow
CreateProcess and ShellExecute differences - Stack Overflow
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin f7696a3e9f33dfcbfdd8ab92afaa77ab668dfeb9
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
获取代码之后,进入 HebarlawkuKekebuwagay 文件夹
dotnet 启动进程传入不存在的文件夹作为工作目录行为变更的更多相关文章
- Linux fing cd 查找文件/文件夹并进入目录命令
查找文件|文件夹并进入目录命令:cd $() [root@localhost /]# cd $(dirname "`find / -name 'ifcfg-ens33'`") // ...
- C# 拷贝指定文件夹下的所有文件及其文件夹到指定目录
要拷贝的文件及其文件夹结构 其中.lab文件不能覆盖 /// <summary> /// 拷贝oldlab的文件到newlab下面 /// </summary> /// < ...
- gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...
- c#winform选择文件,文件夹,打开指定目录方法
private void btnFile_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDia ...
- Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构
本文提供了一个在Windows环境下使用Visual Studio 2013编辑现有源代码并且保持目录结构的方法.本文使用VS2013中文社区版做示例(本版本为免费版,可在VS官网下载),其他版本的V ...
- Linux CP文件夹略过目录的解决
在Ubuntu Linux复制文件夹时出现一个问题,做个笔记,希望能给刚入门的菜鸟学习一下(见图1). 出现略过目录: www_linuxidc_com@linuxidc-Aspire-3680:~$ ...
- 关于解决方案和web文件夹放在同一目录路径错误的问题
今天公司要做个b2b商城,下了个源码,目的是在这个基础上改,可是源码没有解决方案,于是建立了个解决方案,然后添加网站,发现解决方案和web目录位于不同目录(解决方案总是自动生成一个目录),可是我从网上 ...
- gulp插件实现压缩一个文件夹下不同目录下的js文件(支持es6)
gulp-uglify:压缩js大小,只支持es5 安装: cnpm: cnpm i gulp-uglify -D yarn: yarn add gulp-uglify -D 使用: 代码实现1:压缩 ...
- 文件处理(如果文件存在则追加,不存在则生成多级文件夹以及txt目录)
public static void writeFile(String path,String fileName,String content) throws IOException { File f ...
- WPF 获取文件夹路径,目录路径,复制文件,选择下载文件夹/目录
private void Border_MouseLeftButtonUp_4(object sender, MouseButtonEventArgs e) { //获取项目中文件 , System. ...
随机推荐
- #树上启发式合并,trie#JZOJ 5363 生命之树
分析 考虑按位处理, 如果熟悉dsu的话可以发现这道题能够用dsu做, 再用两个trie分别维护该位为0或1的字符串, 重儿子可以按照子树字符串的总长计算 代码 #include <cstdio ...
- 内存分析利器之UMDH
近两周投入分析产品的内存泄漏问题. 测试团队反馈产品在安卓平台运行时,随用户操作,应用占用的内存出现上涨的趋势,停止操作并等待一段时间之后,应用占用的内存没有下降,怀疑存在内存泄漏问题. 结合复现的情 ...
- Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
使用 SSH 密钥对的 Git 安全远程访问:生成.添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制.在使用 SSH 连接到远程 Git 存储 ...
- openGauss 列存表PSort索引
openGauss 列存表 PSort 索引 概述 PSort(Partial sort) Index 是在列存表的列上建的聚簇索引.CUDesc 上有每个 CU 的 min 和 max 值,但如果业 ...
- 7月27日19:30直播预告:HarmonyOS3及华为全场景新品发布会
7月27日 19:30 HarmonyOS 3 及华为全场景新品发布会 高能来袭! 在HarmonyOS开发者社区企微直播间 一起见证HarmonyOS的又一次智慧进化 扫码预约直播,与您不见不散!
- The First 寒假集训の小总结
转眼间十五天的寒假集训已经结束,也学习到了许多新知识,dp,线段树,单调栈和单调队列......,假期过得还是很有意义的,虽然我的两次考试成绩不尽人意(只能怪我自己没有好好理解知识点还有好好做题),但 ...
- 实验1产品原型设计-YHealth健康APP
一.实验题目:原型设计 二.实验目的:掌握产品原型设计方法和相应工具使用. 三.实验要求: (1)对比分析墨刀.Axure.Mockplus等原型设计工具的各自的适用领域及优缺点 --墨刀 适用领域: ...
- docker 应用篇————portainer[九]
前言 简单介绍一下portainer. 正文 运行一下. docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/va ...
- js 闭包(新)
前言 旧的没有搬过来,先写一下新的感悟. 正文 ECMAScript中,闭包指的是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文的数据保存起来了.哪怕是简单的全局变量也是如此,因为函 ...
- 重新整理数据结构与算法(c#)—— 顺序存储二叉树[十九]
前言 二叉树顺序存bai储是二叉树的一种存储方式.将二du叉树存储在一zhi个数组中,通过存储元素的下dao标反映元素之间的父子关系. 正文 这个概念比较简单,比如一个节点的在数组的index是x,那 ...