c# - 在进程开始之前对命令行参数执行什么处理/验证?

标签 c# .net windows command-line-arguments

我有一个小型 WPF 应用程序,它接受文件路径作为命令行参数。

如果用户拖入过多的长路径文件,将超​​过最大命令行长度,至少在 32 位 WinXP 上是这样。

结果是一个错误窗口显示:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

这看起来类似于错误

The filename or extension is too long.

在这些情况下,进程似乎永远不会启动。

我认为拖放文件实际上只是将它们的路径作为字符串传递,但这些错误表明情况并非如此,并且操作系统/外壳/框架的某些部分正在根据这些是的事实进行某种验证文件/目录路径,当失败时,进程不会启动。

有谁知道在将命令行参数传递给 .NET .exe 和该 .exe 启动之间发生了什么?

最佳答案

答案在你的问题中:路径列表超过最大命令行大小,所以你的程序无法启动。

操作系统在启动您的进程之前构建命令行,因为在创建进程时需要该信息。由于命令行长度超过最大大小,操作系统无法构建它并失败,甚至在尝试创建进程之前可能会出现 ERROR_FILENAME_EXCED_RANGE ( sic )。

因此,您的程序永远不会启动。

关于c# - 在进程开始之前对命令行参数执行什么处理/验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629856/

相关文章:

windows - Rust:如何对SAFESEH图像进行链接不安全

Oracle SQL Developer 上的 Windows 域登录

c# - 更改 ViewModel 对象不会反射(reflect)对 View 的更改

c# - 如何将值传递给sql server中的 View

c# - 在 ReSharper 7 中,是否可以扩展字符串的语法突出显示?

.net - IKVM.NET 和 Lucene

c# - C# MVC4.0 中的有效 Math.Random

c# - Entity Framework 和三层架构

.net - 视频中移动物体速度测量算法

windows - 使用 Powershell 将所有文件夹和子文件夹从一个驱动器移动到另一个驱动器