如何绕过命令行长度限制?

Cra*_*893 17 c# windows command-line

我一直在研究一个小而简单的程序,我将文件放到其上,根据certian规则,它们被移动到不同的地方.

该程序工作正常,除非我删除多个文件,然后它启动一个错误(似乎比任何东西更多)启动命令"c:\ myapp.exe\file\file\file"也是长.

我意识到我可以设置一个后台进程,但我真的更希望这个程序不在后台运行(大多数时候它都是空闲的).

有没有解决这个限制的方法?

Ole*_*leg 14

如果要删除与Windows资源管理器相关的文件,则可以将自己的Drop Handler作为Shell扩展处理程序实现(请参阅http://msdn.microsoft.com/en-us/library/cc144165(VS.85). aspxhttp://msdn.microsoft.com/en-us/library/bb776797.aspx).在http://www.codeproject.com/kb/shell/shellextguideindex.aspx上,您将找到如何编写此类扩展的良好介绍.第VI部分(参见http://www.codeproject.com/kb/shell/ShellExtGuide6.aspx)给出了Drop Handler的一个例子(对于其他一些用例,但它无关紧要).

关于Drop Shell扩展处理程序,您的程序将收到有关所有已删除文件的完整信息,您无需启动子程序将所有文件作为命令参数.


GnP*_*GnP 14

来自这个博客:

  • CreateProcess函数的最大命令行长度为32767个字符.此限制来自UNICODE_STRING结构.
  • 如果您使用的是CMD.EXE命令处理器,那么您还需要遵守CMD.EXE强加的8192字符命令行长度限制.
  • 如果您正在使用ShellExecute/Ex函数,那么您将受到ShellExecute/Ex函数强加的INTERNET_MAX_URL_LENGTH(大约2048年)命令行长度限制.
  • 环境的最大大小为32767个字符.环境的大小包括所有变量名称和所有值.

因此,您将不得不解决一些提到的解决方法(同样,我链接的msdn博客上还有另一种解决方法).