Недавно на работе столкнулся с проблемой. На этапе компоновки проектов VC++ стала возникать ошибка "Error spawning 'cmd.exe'".
Оказалось, что во время установки одной из программ была запорченна переменная окружения Path. Значение этой переменной хранится в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment как параметр Path типа REG_EXPAND_SZ. Некоторые "умные" установщики программ изменяют тип этого параметра на REG_SZ и это приводит к тому, что переменная Path при следующей загрузке оказывается неинициализированной и компоновщик VC++ не находит cmd.exe.
Для иправления достаточно скопировать в буфер обмена значение этого параметра, удалить параметр и создать его уже с нужным типом. Предположу, что "особенно умные" установщики могут портить не только тип параметра, но и его содержимое.
Для того, чтобы убрать зависимость работы VC++ от переменной окружения Path, достаточно открыть окно настроек Visual Studio, выбрать в разделе Projects and
Solutions группу VC++ Directories, указать в списке Show directories for значение Executable files и добавить в список каталогов все значения, хранящиеся в Path. Эту операцию нужно повторить для каждой платформы.
Подписаться на:
Комментарии к сообщению (Atom)
2 комментария:
Спасибо, пригодилось.
Только зачем добавлять в VC++ Directories ВСЕ значения из PATH? Вполне хватит и каталога с cmd.exe :), скажем, С:\WINDOWS\system32.
enzzef, вы правы. Но во время компиляции могут вызываться разные другие утилиты (например, во время custom builds), а переменную PATH могут случайно затереть особо "умные" программы установщики. Лучше перестраховаться.
Отправить комментарий