Nvm-windows: Необходимо вручную удалить папку при удалении nvm

Созданный на 11 мар. 2017  ·  13Комментарии  ·  Источник: coreybutler/nvm-windows

Привет,
вот шаги для воспроизведения (включая описание ошибки). Это происходит в системе x64,

nvm install xyz (6.10.0 или аналогичный, но версия не имеет значения)
nvm удалить xyz
=> удаление выполнено успешно, остатков нет

nvm установить xyz
nvm использует xyz
nvm использует uvw (другая версия - просто чтобы убедиться, что xyz не используется - этот шаг, вероятно, не нужен)
nvm удалить xyz
=> необходимо вручную удалить папку xyz из пути nvm, который всегда содержит только node.exe

IMO, это происходит из-за того, что перед "использованием" существует node64.exe, который переименован при "использовании" в node.exe. Этот node.exe остается с этого момента и, очевидно, блокирует удаление папки.

Надеюсь, описание достаточно ясное.
Спасибо

Самый полезный комментарий

необходимо повторно открыть из-за той же проблемы на macOS

Все 13 Комментарий

Если после этого запустить nvm ls , отображается ли удаленная версия?

Да, действительно - после установки / использования / удаления nvm ls все еще показывает
удаленная версия.

Кстати, если я переименую node.exe в node64.exe перед удалением,
версия удаляется полностью (без необходимости вручную удалять
папка).

Хорошо, я пометил это как ошибку. Какая у вас версия Windows?

Какая у вас версия Windows?

Windows 10 (юбилейное обновление) x64

Привет,

afaict (но я не разработчик Go) в arch.go: SearchBytesInFile
открытый файл никогда не закрывается. Поэтому, когда os.RemoveAll пытается удалить
файлах нарушено совместное использование.

Я несколько удивлен, что об этом раньше не сообщалось,
потому что я думаю, что ошибка должна возникать каждый раз, когда "использованная" версия
(который содержит node.exe) должен быть удален.

Когда исполняемый файл завершает операцию, он больше не связывается ни с какими файлами. Другими словами, исполняемый файл выполняет одну операцию, а затем закрывает все файловые соединения путем выхода. Тем не мение; У меня не было возможности лично протестировать это на последней сборке Windows. Если Windows сейчас использует файловую блокировку для этой операции, возможно, вы правы ... это может продолжаться.

Я постараюсь отладить это как можно скорее, но на этой неделе я работаю по контракту и имею обязательства по SXSWi. Так что может пройти некоторое время, прежде чем я смогу сесть с этим.

Когда исполняемый файл завершает операцию, он больше не связывается ни с какими файлами. Другими словами, исполняемый файл выполняет одну операцию, а затем закрывает все файловые соединения путем выхода.

IMO: nvm.exe открывает node.exe (и только это, а не node64.exe или тому подобное)
и сканирует пару байтов, но не закрывает дескриптор файла.
Затем nvm.exe пытается удалить папку (но, конечно, не закрыл
между ними, поэтому дескриптор файла все еще открыт).

Тем не мение; У меня не было возможности лично протестировать это на последней сборке Windows. Если Windows сейчас использует файловую блокировку для этой операции, возможно, вы правы ... это может продолжаться.

Это не совсем файловая блокировка. Я позволяю nvm.exe выводить ошибку, и он
читает "Процесс не может получить доступ к файлу, потому что он используется
другой процесс »(что является тем же сообщением, если оно находится в том же
процесс).

Я постараюсь отладить это как можно скорее, но на этой неделе я работаю по контракту и имею обязательства по SXSWi. Так что может пройти некоторое время, прежде чем я смогу сесть с этим.

Хорошо, без проблем. Если бы вы только могли исправить это в следующей версии.

Спасибо!

Я провел небольшое тестирование, и это происходит только в том случае, если вы nvm используете xxx версию, которую нужно удалить, И вы используете Arch 64. Как уже упоминалось, node64.exe переименован в node.exe и не удален. Однако, если вы используете другую версию и вручную переименуете node.exe в node64.exe (как упоминает ujaroe), то удаление будет успешно завершено.

Это означает, что есть несколько способов исправить проблему. Я бы рекомендовал «nvm use» восстановить папку с версией, из которой команда use перемещается обратно в исходное состояние. Другой - это проверка архива удаления и проверка того, что исполняемый файл узла соответствует арке версии. Есть еще пара вещей, которые можно сделать с помощью символических ссылок, но я думаю, что это два лучших варианта. Мой навык игры в го довольно низкий, но я постараюсь создать один или оба из них в ближайшее время.

редактировать: орфография

Здесь та же проблема. Вывод CLI:

❯ nvm list

  * 8.4.0 (Currently using 64-bit executable)
    6.11.2
    6.10.0

❯ nvm uninstall 6.10.0
Uninstalling node v6.10.0...Error removing node v6.10.0
Manually remove C:\Users\darsain\AppData\Roaming\nvm\v6.10.0.

❯ nvm list

  * 8.4.0 (Currently using 64-bit executable)
    6.11.2
    6.10.0

После выполнения команды uninstall в папке v6.10.0 был только файл node.exe . Я на 99% уверен, что этим никто не пользовался. Удаление вручную прошло нормально.

Но, думаю, версия v6.10.0 была установлена ​​некоторое время назад на nvm 1.1.1. Сегодня обновился до 1.1.6. Однако установка и удаление узла 6.11.2, которые я сделал сегодня после обновления, работали нормально.

Я могу подтвердить это. Также случилось со мной на Win10 x64 с использованием node v6.9.1 и nvm 1.1.3

Также произошло на Win10 x64 (версия 1709) с использованием узла v8.11.1 и nvm 1.1.6

Привет, @coreybutler , ошибка также произошла в Windows10 x64, и если я использую команду nvm use x.y.z для переключения версии nodejs, xyz не будет удален, а версия abc, если я не смог использовать nvm use , ее можно удалить

необходимо повторно открыть из-за той же проблемы на macOS

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

leiamac picture leiamac  ·  4Комментарии

keylowgee picture keylowgee  ·  6Комментарии

Pomax picture Pomax  ·  3Комментарии

janpio picture janpio  ·  3Комментарии

webspecialist picture webspecialist  ·  5Комментарии