Nvm-windows: Besoin de supprimer manuellement le dossier lors de la désinstallation de NVM

Créé le 11 mars 2017  ·  13Commentaires  ·  Source: coreybutler/nvm-windows

Salut,
voici les étapes à reproduire (y compris la description de l'erreur). Cela se produit sur un système x64,

nvm install xyz (6.10.0 ou similaire, mais la version n'a pas d'importance)
nvm désinstaller xyz
=> désinstallation réussie, pas de restes

nvm installer xyz
nvm utilise xyz
nvm utilise uvw (une autre version - juste pour être sûr que xyz n'est pas utilisé - cette étape n'est probablement pas nécessaire)
nvm désinstaller xyz
=> besoin de supprimer manuellement le dossier xyz du chemin nvm, qui contient toujours node.exe seul

OMI, cela se produit car avant "l'utilisation", il y a un node64.exe, qui est renommé sur "use" en node.exe. Ce node.exe reste à partir de ce point et bloque évidemment la suppression du dossier.

J'espère que la description est assez claire.
Merci

bug

Commentaire le plus utile

besoin de rouvrir en raison du même problème sur macOS

Tous les 13 commentaires

Si vous exécutez nvm ls après cela, la version désinstallée s'affiche-t-elle?

Oui, en effet - après l'installation / l'utilisation / la désinstallation, nvm ls affiche toujours le
version désinstallée.

BTW, si je renomme node.exe en node64.exe avant la désinstallation, le
version est complètement supprimée (sans avoir à supprimer manuellement le
dossier).

OK, j'ai marqué cela comme un bug. Quelle version de Windows utilisez-vous?

Quelle version de Windows utilisez-vous?

Windows 10 (mise à jour anniversaire) x64

Salut,

afaict (mais je ne suis pas un développeur Go) dans arch.go: SearchBytesInFile le
le fichier ouvert n'est jamais fermé. Ainsi, lorsque os.RemoveAll essaie de supprimer le
fichiers il y a une violation de partage.

Je suis cependant quelque peu surpris que cela n'ait pas été signalé auparavant,
car je pense que le bug devrait survenir à chaque fois qu'une version "utilisée"
(qui contient node.exe) doit être désinstallé.

Une fois que l'exécutable a terminé une opération, il n'est plus associé à aucun fichier. En d'autres termes, l'exécutable exécute une opération, puis ferme toutes les connexions de fichiers en quittant. Pourtant; Je n'ai pas eu l'occasion de tester personnellement cela sur la dernière version de Windows. Si Windows utilise maintenant un verrou de fichier pour cette opération, vous avez peut-être raison ... cela pourrait persister.

J'essaierai de déboguer ceci dès que possible, mais je suis sur un travail contractuel cette semaine et j'ai des obligations SXSWi. Donc, il faudra peut-être un certain temps avant que je puisse vraiment m'asseoir avec ça.

Une fois que l'exécutable a terminé une opération, il n'est plus associé à aucun fichier. En d'autres termes, l'exécutable exécute une opération, puis ferme toutes les connexions de fichiers en quittant.

IMO: nvm.exe ouvre node.exe (et seulement cela, pas node64.exe ou autre)
et analyse quelques octets, mais ne ferme pas le descripteur de fichier.
Ensuite, nvm.exe essaie de supprimer le dossier (mais bien sûr, il n'a pas quitté
entre les deux, de sorte que le descripteur de fichier est toujours ouvert).

Pourtant; Je n'ai pas eu l'occasion de tester personnellement cela sur la dernière version de Windows. Si Windows utilise maintenant un verrou de fichier pour cette opération, vous avez peut-être raison ... cela pourrait persister.

Ce n'est pas vraiment un verrou de fichier. Je laisse nvm.exe afficher l'erreur et il
lit "Le processus ne peut pas accéder au fichier car il est utilisé par
un autre processus "(qui est le même message s'il est dans le même
traiter).

J'essaierai de déboguer ceci dès que possible, mais je suis sur un travail contractuel cette semaine et j'ai des obligations SXSWi. Donc, il faudra peut-être un certain temps avant que je puisse vraiment m'asseoir avec ça.

D'accord pas de problème. Si vous pouviez le réparer dans la prochaine version.

Merci!

J'ai fait un petit test et cela ne se produit que si vous utilisez nvm xxx la version à supprimer ET que vous utilisez arch 64. Comme cela a été mentionné, le node64.exe est renommé en node.exe et n'est pas supprimé. Cependant, si vous utilisez une autre version et que vous renommez manuellement node.exe en node64.exe (comme le mentionne ujaroe), la désinstallation est terminée avec succès.

Cela signifie qu'il existe plusieurs façons de corriger le problème. Je recommanderais 'nvm use' de restaurer le dossier de version que la commande use est en train de retourner à l'état d'origine. L'autre consiste à vérifier la désinstallation de l'arche et à vous assurer que l'exécutable du nœud correspond à l'arche de la version. Il y a quelques autres choses qui pourraient être faites avec des liens symboliques mais je pense que ce sont les deux meilleures options. Ma compétence Go est assez faible, mais je vais essayer de construire un ou les deux bientôt.

modifier: orthographe

Même problème ici. Sortie 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

Après avoir exécuté la commande uninstall , le dossier v6.10.0 contenait que le fichier node.exe . Je suis sûr à 99% que rien ne l'utilisait. La suppression manuelle a bien fonctionné.

Mais, la version v6.10.0 a été installée il y a quelque temps sur nvm 1.1.1 je pense. Aujourd'hui, je suis passé à la version 1.1.6. L'installation et la suppression du nœud 6.11.2, ce que j'ai fait aujourd'hui après la mise à niveau, ont bien fonctionné.

Je peux confirmer celui-ci. Il m'est également arrivé sur Win10 x64 en utilisant le nœud v6.9.1 et nvm 1.1.3

Également arrivé sur Win10 x64 (version 1709) en utilisant le nœud v8.11.1 et nvm 1.1.6

Salut, @coreybutler , le bogue s'est également produit sur Windows10 x64, et si j'utilise la commande nvm use x.y.z pour changer la version de nodejs, le xyz ne sera pas désinstallé, tandis que la version abc si je ne pouvais pas utiliser nvm use Commande

besoin de rouvrir en raison du même problème sur macOS

Cette page vous a été utile?
0 / 5 - 0 notes