我有一个小型 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/