我System.ArgumentException: Illegal characters in path
在尝试编写脚本时遇到了BinScope
从命令行。BinScope 是 Microsoft 的 SDLC 审计工具,完整输出如下。
异常声明了非法字符,但它没有告诉我非法字符是什么,也没有告诉我它的位置。我有点不知所措,因为所有选项都是有效的(根据binscope.exe /?
),并且所有路径都已加引号。
路径中哪个(或哪些)字符是非法的?如何确定违规字符?
C:\Users\Audit\Desktop>binscope.exe /sdl "C:\Users\Audit\Deskt
op\Program\Agent\twprogram.exe" /sympath "C:\Users\Audit\De
sktop\Program\Agent\twprogram.pdb" /outdir "C:\Users\Audit\
Desktop\" /logfile twprogram.xml
Microsoft SDL BinScope binary analysis tool v1.0.4027.29711
Unhandled Exception: System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path)
at System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
at System.IO.Path.NormalizePath(String path, Boolean fullCheck)
at System.IO.Path.GetFullPathInternal(String path)
at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Bo
olean overwrite)
at Microsoft.MSEC.BinScope.BinScopeMain.Run(BinScopeConfiguration config, Bin
ScopeScanner scanner)
at Microsoft.MSEC.BinScope.BinScopeMain.Main(String[] args)
和:
C:\Users\Audit\Desktop>echo %PATH%
C:\Program Files (x86)\Microsoft\SDL BinScope\;C:\Windows\system32;C:\Windows;
C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\
答案1
转义(双击,如Desktop\\"
)或删除最后的反斜杠/outdir "C:\Users\Audit\Desktop\"
- 它的解析方式会创建[转义]不平衡引号字符("
),这在路径中是无效的。
顺便说一句-取自微软参考资料:http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars%28v=vs.110%29.aspx
在基于 Windows 的桌面平台上,无效路径字符可能包括 ASCII/Unicode 字符 1 到 31,以及引号(“)、小于号(<)、大于号(>)、管道符(|)、退格符(\b)、空值(\0)和制表符(\t)。
编辑:关于 Windows 上 C#(以及 C、C++)参数解析规则的附加信息(取自http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs.aspx):
如果双引号后面有两个或偶数个反斜杠,则前面的每个反斜杠对都会被替换为一个反斜杠,并删除双引号。如果双引号后面有奇数个反斜杠(包括一个),则前面的每个反斜杠对都会被替换为一个反斜杠,并删除剩余的反斜杠;但是,在这种情况下不会删除双引号。