Иногда у пользователей статического анализатора PVS-Studio, использующих среду Visual Studio 2008, возникает следующая проблема при запуске анализа.
Анализ не начинается, а выдаётся только одно сообщение вида:
\Utilities\Bin\x86";"C:\WINDOWS\system32";"C:\WINDOWS";
"C:\WINDOWS\System32\Wbem";"C:\Program. was unexpected at this time.
После изучения данной проблемы мы смогли установить, что такое поведение вызвано ошибкой в одном из bat файлов настройки окружения Visual Studio. Вот этот файл:
..\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
Анализатор PVS-Studio использует файл vsvars32.bat для настройки окружения перед запуском препроцессора Visual C++. Оказалось, что проблема возникает из-за нижеприведённого фрагмента файла:
@if not "%WindowsSdkDir%" == "" (
set "PATH=%WindowsSdkDir%bin;%PATH%"
set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%"
set "LIB=%WindowsSdkDir%lib;%LIB%"
)
Данная ошибка проявится, если переменная окружения PATH будет содержать символы '(' и ')', например, в неё будет включён путь до Microsoft DirectX SDK - "C:\Program Files\Microsoft DirectX SDK (August 2006)\Utilities\Bin\x86". Тогда выражение, следующее за оператором if
@if not "%WindowsSdkDir%" == "" (
set "PATH=%WindowsSdkDir%bin;%PATH%"
обрывается одной из закрывающих скобок в PATH, в данном случае ..August 2006), что и приводит к рассматриваемой проблеме.
Данную ситуацию можно разрешить 2-мя способами:
@if "%WindowsSdkDir%" == "" goto SkipSDKVariableSet
@set "PATH=%WindowsSdkDir%bin;%PATH%"
@set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%"
@set "LIB=%WindowsSdkDir%lib;%LIB%"
:SkipSDKVariableSet
Второе решение создаёт дополнительную проблему с установкой обновлений, которые могут переписать данный участок файла vsvars32.bat.