В файле npm.cmd есть следующие строки:
ECHO %NPM_PREFIX_NPM_CLI_JS%
IF EXIST "%NPM_PREFIX_NPM_CLI_JS%" (
ECHO FILE EXISTS
SET "NPM_CLI_JS=%NPM_PREFIX_NPM_CLI_JS%"
)
"%NODE_EXE%" "%NPM_CLI_JS%" %*
Когда это выполняется, ECHO печатает: C:\Windows\system32\config\systemprofile\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js. Я проверил файл - он существует. Когда я запускаю пакет как пользователь SYSTEM - он также работает. Но когда агент TeamCity выполняет команду npm, он думает, что файла npm-cli.js не существует.
Я проверил право доступа к файлу и папке, и все в порядке. Более того, когда я удаляю IF и оставляю только командный узел SET, который может найти, завершите выполнение файла.
Для тестирования я написал скрипт, который проверяет, все ли папки существуют. Запуск его из теста TeamCity показывает, что он считает, что папки до C:\Windows\system32\config\systemprofile\AppData\Roaming действительно существуют, но все, что находится после них, не существует.
Выполнение команды DIR /A из шага командной строки TeamCity, напечатанное:
03/02/2017 10:31 AM <DIR> .
03/02/2017 10:31 AM <DIR> ..
10/26/2015 01:33 PM <DIR> Microsoft
03/02/2017 10:31 AM <DIR> NuGet
0 File(s) 0 bytes
4 Dir(s) 122,662,453,248 bytes free
Хотя на самом деле есть 3 папки, которые не отображаются в результате.
Что могло быть причиной этого?
да. Значение правильное.
После небольшого тестирования выяснилось, что это происходит только тогда, когда команда выполняется агентом TeamCity. Запуск файла batch от пользователя SYSTEM не имеет такого поведения.
Так это проблема пути / текущего каталога?
@ shawnt00 Я думаю, что это какая-то проблема с этим конкретным путем. Я также обновил вопросы, включив в них более подробную информацию, которую я нашел до сих пор.





Имеет ли переменная правильное значение?