BinScope i ArgumentException: Niedozwolone znaki na ścieżce

1

Łapie się System.ArgumentException: Illegal characters in pathpodczas próby skryptu BinScopez linii poleceń. BinScope to narzędzie kontrolne SDLC firmy Microsoft, a pełne dane wyjściowe znajdują się poniżej.

Wyjątkiem jest powoływanie się na nielegalną postać, ale nie mówi mi, co to za nielegalna postać ani jej lokalizacja. Jestem trochę zagubiony, ponieważ wszystkie opcje są prawidłowe (zgodnie z binscope.exe /?), a wszystkie ścieżki są cytowane.

Który znak (lub znaki) jest nielegalny na ścieżce? Jak określa się obrażającą postać?


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)

I:

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\
jww
źródło

Odpowiedzi:

1

Escape (podwójne, jak w Desktop\\") lub usuń ostatni odwrotny ukośnik w /outdir "C:\Users\Audit\Desktop\"- sposób, w jaki jest analizowany, tworzy [escaped] niezrównoważony cytat char ( "), który jest nieprawidłowy na ścieżce.

btw - wzięte z referencji Microsoft tutaj: http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars%28v=vs.110%29.aspx

na platformach stacjonarnych z systemem Windows nieprawidłowe znaki ścieżki mogą zawierać znaki ASCII / Unicode od 1 do 31, a także cudzysłowy („), mniej niż (<), więcej niż (>), potok (|), backspace (\ b) , null (\ 0) i tab (\ t).

Edycja: Dodatkowe informacje na temat C # (a także C, C ++) argumentują reguły parsowania w systemie Windows (pobrane z http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs.aspx ):

Jeśli podwójny cudzysłów występuje po dwóch lub parzystej liczbie odwrotnych ukośników, każda poprzedzająca para odwrotnego ukośnika zostaje zastąpiona jednym odwrotnym ukośnikiem i podwójny znak cudzysłowu zostaje usunięty. Jeśli podwójny cudzysłów występuje po nieparzystej liczbie odwrotnych ukośników, w tym tylko jeden, każda poprzednia para jest zastępowana jednym odwrotnym ukośnikiem, a pozostały odwrotny ukośnik jest usuwany; jednak w tym przypadku podwójny cudzysłów nie jest usuwany.

wmz
źródło
To było to, dzięki ... Trudno uwierzyć, że program nie może zużyć ścieżki podanej przez użytkownika bez masowania. Tak naprawdę starałem się dać temu coś łatwego w obsłudze, jak cytowane ścieżki i jednoznaczne katalogi.
jww
@jww z pewnością przeoczenie (czego nie oczekuje użytkownik - chyba że jest to udokumentowane), ale jest to produkt uboczny parsera c # args. Możesz spróbować zgłosić raport o błędzie (prawdopodobnie pod parasolem VS)
wmz