Nvm-windows: 在nvm卸载时需要手动删除文件夹

创建于 2017-03-11  ·  13评论  ·  资料来源: coreybutler/nvm-windows

你好,
这里是重现步骤(包括错误描述)。 这发生在x64系统上,

nvm install xyz(6.10.0或类似版本,但版本无关紧要)
nvm卸载xyz
=>卸载成功,没有剩余

nvm安装xyz
nvm使用xyz
nvm使用uvw(另一个版本-请确保未使用xyz-可能无需执行此步骤)
nvm卸载xyz
=>需要从nvm路径中手动删除文件夹xyz,该路径始终仅包含node.exe

IMO,发生这种情况是因为在“使用”之前有一个node64.exe,该节点在“使用”时被重命名为node.exe。 从这一点开始,此node.exe仍然存在,并且显然阻止了文件夹的删除。

我希望描述足够清楚。
谢谢

最有用的评论

由于macOS上的相同问题,需要重新打开

所有13条评论

如果在此之后运行nvm ls ,它是否显示已卸载的版本?

是的,的确如此-在安装/使用/卸载后,nvm ls仍然显示
卸载版本。

顺便说一句,如果我在卸载之前将node.exe重命名为node64.exe,则
版本已完全删除(无需手动删除
文件夹)。

好的,我已将其标记为错误。 您正在运行哪个版本的Windows?

您正在运行哪个版本的Windows?

Windows 10(周年更新)x64

你好,

arch.go:SearchBytesInFile中的afaict(但我不是Go开发人员)
打开的文件永远不会关闭。 因此,当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'恢复使用命令从原本移动回原始状态的版本文件夹。 另一个是具有卸载检查目录,并确保节点可执行文件与版本的目录匹配。 符号链接还可以完成其他几件事,但是我认为这是最好的两个选择。 我的围棋技巧相当低,但是我会尽快尝试构建其中的一个或两个。

编辑:拼写

同样的问题在这里。 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正常运行。

我可以确认这一点。 我也在使用节点v6.9.1和nvm 1.1.3的Win10 x64上遇到了我

在使用节点v8.11.1和nvm 1.1.6的Win10 x64(版本1709)上也发生了

嗨, @coreybutler ,该错误也发生在Windows10 x64上,如果我使用nvm use x.y.z命令切换nodejs的版本,则xyz将不会被卸载,而abc的版本如果我无法使用nvm use命令,可以将其卸载

由于macOS上的相同问题,需要重新打开

此页面是否有帮助?
0 / 5 - 0 等级