BinScope और ArgumentException: अवैध वर्ण पथ में


1

मैं कमांड लाइन से 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\"- जिस तरह से इसे पार्स किया गया है [बच गए] असंतुलित उद्धरण चार ( ") जो कि पथ में अमान्य है।

btw - Microsoft संदर्भ से यहां लिया गया: http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars%28v=vs.110%29.aspx

Windows- आधारित डेस्कटॉप प्लेटफ़ॉर्म पर, अमान्य पथ वर्णों में ASCII / Unicode वर्ण 1 शामिल हो सकते हैं 31 के माध्यम से, साथ ही उद्धरण ("), से कम (<), से अधिक (>), पाइप (!), बैकस्पेस (\ b) | , नल (\ 0) और टैब (\ t)।

संपादित करें: C # (और C, C ++) की अतिरिक्त जानकारी, विंडोज पर पार्सिंग नियम लेती है ( http://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs.aspx से लिया गया है :

यदि दोहरा उद्धरण चिह्न दो या एक से अधिक बैकस्लैश का अनुसरण करता है, तो प्रत्येक आगे बढ़ने वाली बैकलैश जोड़ी को एक बैकस्लैश के साथ बदल दिया जाता है और डबल कोटेशन चिह्न हटा दिया जाता है। यदि दोहरे उद्धरण चिह्न के पीछे एक विषम संख्या होती है, जिसमें सिर्फ एक शामिल है, प्रत्येक पूर्ववर्ती जोड़ी को एक बैकस्लैश के साथ बदल दिया जाता है और शेष बैकस्लैश को हटा दिया जाता है; हालाँकि, इस मामले में दोहरे उद्धरण चिह्न को हटाया नहीं जाता है।


यह वह था, धन्यवाद ... यह विश्वास करना मुश्किल है कि कार्यक्रम मालिश किए बिना उपयोगकर्ता द्वारा आपूर्ति किए गए पथ का उपभोग नहीं कर सकता है। मैं वास्तव में काफी कठिन कोशिश कर रहा था कि इसे संभालना आसान हो, जैसे कि उद्धृत पथ और अस्पष्ट निर्देशिका।
jww

@jww निश्चित रूप से एक निरीक्षण (जैसा कि उपयोगकर्ता द्वारा अपेक्षित नहीं है - जब तक कि यह दस्तावेज नहीं है), लेकिन यह c # arser parser का बायप्रोडक्ट है। आप एक बग रिपोर्ट (शायद वी.एस. छाता के तहत) दर्ज करने की कोशिश कर सकते हैं
wmz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.