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

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

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



这看起来类似于错误



在这些情况下,该过程似乎永远不会开始。

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

有谁知道在将命令行参数传递给 .NET .exe 和该 .exe 启动(如果有的话)之间会发生什么?

最佳答案

答案就在您的问题中:路径列表超过了最大命令行大小,因此您的程序无法启动。

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

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

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

10-13 07:25