Error spawning 'cmd.exe' в Visual Studio 2008

Недавно на работе столкнулся с проблемой. На этапе компоновки проектов 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. Эту операцию нужно повторить для каждой платформы.

2 комментария:

Анонимный комментирует...

Спасибо, пригодилось.
Только зачем добавлять в VC++ Directories ВСЕ значения из PATH? Вполне хватит и каталога с cmd.exe :), скажем, С:\WINDOWS\system32.

Unknown комментирует...

enzzef, вы правы. Но во время компиляции могут вызываться разные другие утилиты (например, во время custom builds), а переменную PATH могут случайно затереть особо "умные" программы установщики. Лучше перестраховаться.

Отправить комментарий