Trop de dossiers dans la variable de chemin

15

J'ai rencontré un problème étrange - je ne peux pas lancer Visual Studio, ni exécuter de commandes simples à partir de l'invite de commande, apparemment en raison de ma variable PATH trop longue. Maintenant que je le regarde, je vois que de nombreuses entreprises ont ajouté leurs répertoires d'installation à la variable PATH.

Je me demandais pourquoi ces entreprises ont ajouté leurs dossiers au chemin (peut-être pour simplifier l'exécution de leurs programmes?), Et lesquelles sont nécessaires et que je peux supprimer. Si j'en supprime certains, ne pourrai-je pas lancer les programmes? ( Voici ce qui existe actuellement dans le chemin)

CC Inc
la source
1
Je n'ai vraiment pas l'impression que c'est particulièrement long PATH... Qu'est-ce qui vous fait soupçonner que c'est trop long? VS lance-t-il une sorte d'erreur? De plus, quelle version de Windows utilisez-vous?
bosco
@bosco Je soupçonne que c'est trop long car l'invite de commande ne peut pas trouver de commandes simples telles que ping. En outre, il semble que ce ne soit pas rare avec Visual Studio . Il a également été mentionné ici que la limite pour le PATH à l'aide de la ligne de commande est d'environ 2000.
CC Inc
Visual studio 2012 renvoie l'erreur "Une exception a été levée par la cible d'un appel" au démarrage. Et quand j'ai regardé dans ActivityLog.xml, il m'a ditThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc
2
Toutes sortes de hacks et de solutions dans la réponse acceptée à la question Stack Overflow # 4405091 :)
bosco

Réponses:

13

il est possible de réduire la quantité excessive de chemins dans les variables d'environnement PATH, il suffit d'enregistrer toute la ligne sur un bloc-notes, en tant que sauvegarde et de supprimer certains et de tester.

La plupart d'entre eux sont là, donc si un raccourci n'a pas de chemin d'accès complet défini pour la "cible", si le "démarrage dans" n'est pas défini correctement dans le raccourci ou si un lancement se fait bizarrement, leur programme et ses parties et pièces sont toujours a trouvé. C'est un Failsafe dans la plupart des situations. Vous voudrez toujours tester pleinement toute utilisation d'un programme dont vous avez supprimé les chemins d'accès.
Il est également très utile pour les personnes qui tapent des commandes dans le CMDprompt, même sans CD, l'ordinateur analysera chaque emplacement jusqu'à ce qu'un programme de ce nom soit trouvé et exécuté. Ou toute autre commande du même nom :-)

Cet ensemble de chemins était (ancré) limité à moins de 255 (ou 260) charachters, qui est passé à 1024 il y a longtemps, puis a été corrigé à l'ère du serveur 03 pour gérer 2048, et pourrait soi-disant gérer 8096 sur certains systèmes, même il y a longtemps.

Les vraies limitations découvertes aujourd'hui que les gens rencontrent se trouvent dans le CMDprompt qui a une limite sur la longueur de la chaîne de commande, qui inclut l'expansion des variables et des chemins.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx ici Microsoft dit:

"La taille maximale d'une variable d'environnement définie par l'utilisateur est de 32 767 caractères. Il n'y a pas de limitation technique à la taille du bloc d'environnement. Cependant, il existe des limites pratiques en fonction du mécanisme utilisé pour accéder au bloc. Par exemple, un fichier de commandes ne peut pas définir une variable plus longue que la longueur maximale de la ligne de commande. "

À cet emplacement ^ ils pointent vers l'emplacement de registre qui contient les chemins d'accès système. Il HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment doit y lire le reste.

La limitation CMDprompt et batch est de 2048 charachters une fois étendue, et serait 4x celle des nouveaux systèmes (nécessite une citation car les gens ne le voient pas)

Voir également http://support.microsoft.com/kb/830473 , qui traite de l'invite de commande et de la longueur de lot pour les anciens systèmes.

Pour vous assurer que les entrées sont correctes, le wiki a ceci à dire:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% Cette variable contient une liste de répertoires délimités par des points-virgules ( ne mettez pas d'espaces ) dans lesquels l'interpréteur de commandes recherchera un fichier exécutable qui correspond à la commande donnée. Les variables d'environnement qui représentent des chemins peuvent être imbriquées dans la variable PATH mais uniquement à un niveau d'indirection. Si cette variable d'environnement de sous-chemin contient elle-même une variable d'environnement représentant un chemin, PATH ne se développera pas correctement dans la substitution de variable.

Avoir tous les chemins supplémentaires ralentit beaucoup certaines choses, car il est alors obligé de regarder dans tous ces endroits, avant d'abandonner. L'utilisation de chemins d'accès complets chaque fois que vous appelez des éléments de fichier sera toujours plus rapide, même lors du traitement par lots ou de l'utilisation de CMDprompt.

L'utilisation d'anciennes conventions DOSlike 8.3 est un moyen de réduire la taille, ce lot /programming//a/20362922 fonctionne bien. assurez-vous (à nouveau) de sauvegarder la chaîne d'origine. Voir également les autres solutions possibles à cette question.

Voici à quoi ressemble la mienne, elle a été pire.
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ QuickTime \ QTSystem \

Je lancerais Quicktime en un clin d'œil, et les programmes AMD ont mis un chemin étendu avant, il l'a lancé, Adobee en avait un, aucun de ceux-ci ne comptait pour les méthodes de raccourci / icône GUI standard. Beaucoup de choses peuvent être supprimées, puis testez toutes les fonctions. Si vous appelez des choses en tapant dans l'invite CMD, la suppression de ces chemins ne fonctionnera pas.

Psycogeek
la source
Vous dites donc que les applications n'échoueront pas si je supprime les chemins?
CC Inc
Windows 7 64 bits
CC Inc
Y a-t-il quelque chose que vous savez déjà désinstallé? Sortez Qt, AMd et Nividia, (après l'avoir sauvegardé) mabey et voyez si c'est assez court alors? J'ai posté le mien, c'est environ 140 caractères.
Psycogeek du
D'accord, je vais voir ..
CC Inc
3
La limitation semble être de 2048 caractères . Après ce point, je ne peux plus saisir de caractères dans l'interface graphique des variables d'environnement.
Mateen Ulhaq
9

J'ai plusieurs variables d'environnement liées au développement logiciel sur mon chemin, qui sont toutes importantes.

La solution ci-dessus ne fonctionnerait pas pour moi, alors je suis allé pour les jonctions de répertoire :

  • Sélectionnez certains des chemins les plus longs dans mon CHEMIN (comme C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • Créer un petit dossier pour stocker mes jonctions: c: \ d \
  • Créez des jonctions courtes pour les longs trajets:

mklink / jc: \ d \ sql "C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \"

Faire cela sur 15 chemins a réduit mon CHEMIN de 2045 à 1285 caractères.

Cela peut être un problème lorsque vous désinstallez enfin des éléments de votre machine car les jonctions resteront sur le chemin et vous devrez les nettoyer manuellement.

Juliano
la source
1
J'ai un environnement de développement assez typique, la dernière VS + plusieurs versions plus anciennes et un serveur SQL installé. Jusqu'à présent, cela a été la meilleure solution. La réponse acceptée pour jeter des chemins est ridicule.
Mesh
Qu'avez-vous modifié l'entrée de chemin de Registre pour C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \? c: \ d \ sql?
OutOFTouch
Si vous voulez dire la variable d'environnement PATH, alors oui. Je n'ai pas joué avec d'autres références aux répertoires de SQL Server.
Juliano
Voici un joli petit tutoriel sur les liens durs: howtogeek.com/howto/16226/…
ofer.sheffer
1

Bien que le maximum autorisé dans le chemin soit beaucoup plus long, j'ai trouvé sur Stack Overflow des réponses faisant autorité sur ce sujet (et des références Microsoft) qui indiquent qu'une valeur de chemin élargi maximale de 2048 octets fonctionnera, et tout ce qui est plus long entraînera des problèmes. Par "étendu", je veux dire que toutes les variables désignées par des délimiteurs% verront leurs valeurs insérées pour devenir la valeur développée, et la longueur totale développée ne doit pas dépasser 2048 octets. J'ai remarqué que les types de problèmes qu'il provoque (à partir de Windows 7) sont:

  • Ne reconnaît pas les chemins à la fin de la valeur
  • L'installation de logiciels ou de correctifs qui modifient la valeur PATH fait que la valeur d'exécution devient NULL, provoquant ainsi toutes sortes de problèmes lors de l'exécution de Windows, comme toutes vos icônes du menu Démarrer, du bureau et de la barre des tâches perdent leurs images et de simples commandes d'invite de commande comme " ping "ou" ipconfig "show command non reconnu des erreurs
  • Les programmes d'application s'appuyant sur les valeurs PATH échouent

Personnellement, je recommande d'autres systèmes d'exploitation que Windows, mais si vous y êtes coincé, vous devez passer vos heures à supprimer les entrées de chemin, à tester pour vous assurer qu'il ne casse rien et à obtenir la valeur du chemin jusqu'à 2048 octets.

Jay Imerman
la source
Il n'est pas clair comment cela répond à la question de l'auteur, au moins plus, que les réponses existantes, qui fournissent des preuves réelles pour sauvegarder leurs déclarations.
Ramhound