Demasiadas carpetas en la variable de ruta

15

He encontrado un problema extraño: no puedo iniciar Visual Studio ni ejecutar comandos simples desde el símbolo del sistema, aparentemente debido a que mi variable PATH es demasiado larga. Ahora que lo miro, veo que muchas compañías han agregado sus directorios de instalación a la variable PATH.

Me preguntaba por qué estas compañías agregaron sus carpetas a la ruta (¿quizás para simplificar la ejecución de sus programas?), Y cuáles son necesarias y cuáles puedo eliminar. Si elimino algunos de ellos, ¿no podré iniciar los programas? ( Esto es lo que existe actualmente en el camino)

CC Inc
fuente
1
Realmente no siento que sea particularmente largo PATH... ¿Qué te lleva a sospechar que es demasiado largo? ¿VS está arrojando algún tipo de error? Además, ¿qué versión de Windows está ejecutando?
bosco
@bosco Sospecho que es demasiado largo porque el símbolo del sistema no puede encontrar comandos simples como ping. Además, parece que esto no es raro con Visual Studio . También se mencionó aquí que el límite para la RUTA usando la línea de comando es alrededor de 2000.
CC Inc
Visual Studio 2012 arroja el error "Se ha producido una excepción por el destino de una invocación" al inicio. Y cuando miré en el ActivityLog.xml, me dijoThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc
2
Todo tipo de hacks y soluciones en la respuesta aceptada de Stack Overflow question # 4405091 :)
bosco

Respuestas:

13

Es posible reducir la cantidad excesiva de rutas en las variables de entorno RUTA, simplemente guarde toda la línea en un bloc de notas, como una copia de seguridad y elimine algunas y pruebe.

La mayoría de ellos están ahí, de modo que si un acceso directo no tiene una ruta completa establecida para el "Destino", si el "Inicio en" no está configurado correctamente en el acceso directo o si el inicio se realiza de manera extraña, su programa y sus partes y piezas son siempre encontró. Es a prueba de fallas en la mayoría de las situaciones. Todavía querría probar completamente cualquier uso de cualquier programa que eliminó sus rutas.
También es muy útil para las personas que escriben comandos en el CMDprompt, incluso sin un CD, la computadora escaneará cada ubicación, hasta que se encuentre y se ejecute un programa con ese nombre. O cualquier otro comando del mismo nombre :-)

Ese conjunto de rutas estaba limitado a menos de 255 (o 260) caracteres, que cambió a 1024 hace algún tiempo, luego fue parcheado en la era del servidor 03 para manejar 2048, y supuestamente podría manejar 8096 en algunos sistemas, incluso Hace mucho tiempo.

Las limitaciones reales descubiertas hoy en día con las que se topan las personas se encuentran en el CMDprompt, que tiene un límite en la longitud de la cadena de comandos, que incluye la expansión de las variables y las rutas.

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

"El tamaño máximo de una variable de entorno definida por el usuario es de 32.767 caracteres. No hay limitación técnica sobre el tamaño del bloque de entorno. Sin embargo, existen límites prácticos que dependen del mecanismo utilizado para acceder al bloque. Por ejemplo, un archivo por lotes no se puede establecer una variable que sea más larga que la longitud máxima de la línea de comando ".

En esa ubicación ^ apuntan a la ubicación del registro que contiene las rutas del sistema. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment Debe leer el resto allí.

El CMDprompt y la limitación de lote son 2048 caracteres una vez expandidos, y se dice que es 4 veces mayor que para los sistemas más nuevos (necesita citación porque la gente no está viendo eso)

Consulte también http://support.microsoft.com/kb/830473 , que trata sobre el símbolo del sistema y la longitud del lote para sistemas más antiguos.

Para asegurarse de que las entradas sean correctas allí, la wiki tiene esto que decir:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% Esta variable contiene una lista de directorios delimitados por punto y coma ( no ponga espacios entre ellos ) en los que el intérprete de comandos buscará un archivo ejecutable que coincida con el comando dado. Las variables de entorno que representan rutas pueden estar anidadas dentro de la variable PATH pero solo en un nivel de indirección. Si esta variable de entorno de subruta en sí contiene una variable de entorno que representa una ruta, PATH no se expandirá correctamente en la sustitución de variable.

Tener todos los caminos adicionales allí ralentiza ciertas cosas un poco, porque luego se ve obligado a mirar en todos esos lugares, antes de que se rinda. El uso de rutas completas cada vez que se llaman elementos de archivo siempre será más rápido, incluso cuando se procesa por lotes o se usa CMDprompt.

El uso de antiguas convenciones 8.3 de DOSlike es una forma de reducir el tamaño, este lote /programming//a/20362922 funciona bien. asegúrese (de nuevo) de hacer una copia de seguridad de la cadena original. Vea también las otras posibles soluciones a esa pregunta.

Así es como se ve el mío, ha sido peor.
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Archivos de programa (x86) \ QuickTime \ QTSystem \

Lanzaría el tiempo rápido en un instante, y los programas de AMD han puesto un camino extendido allí antes, lo lancé, Adobee tenía uno, ninguno de estos importaba para los métodos estándar de acceso directo / icono de la GUI. Se pueden eliminar muchas cosas y luego probar todas las funciones. Si llama a las cosas escribiendo en el indicador CMD, entonces eliminar esas rutas no funcionará.

Psycogeek
fuente
¿Entonces estás diciendo que las aplicaciones no fallarán si elimino las rutas?
CC Inc
Windows 7 de 64 bits
CC Inc
¿Hay algo allí que sabes que ya está desinstalado? Saque Qt, AMd y Nividia, (después de que lo haya respaldado) mabey y vea si es lo suficientemente corto. Publiqué el mío, tiene unos 140 caracteres.
Psycogeek
Bien, ya veré ..
CC Inc
3
La limitación parece ser de 2048 caracteres . Después de ese punto, no puedo ingresar más caracteres en la GUI de variables de entorno.
Mateen Ulhaq
9

Tengo varias variables de entorno relacionadas con el desarrollo de software en mi camino, todas las cuales son importantes.

La solución anterior no funcionaría para mí, así que fui por uniones de directorios :

  • Seleccione algunos de los caminos más largos en mi RUTA (Me gusta C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • Crear una pequeña carpeta para almacenar mis cruces: c: \ d \
  • Crear cruces cortos para caminos largos:

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

Hacer eso en 15 caminos redujo mi RUTA de 2045 a 1285 caracteres.

Puede ser un problema cuando finalmente desinstale cosas de su máquina ya que las uniones permanecerán allí en el camino y tendrá que limpiarlas manualmente.

Juliano
fuente
1
Tengo un entorno de desarrollo bastante típico, el último VS + varias versiones anteriores y el servidor SQL instalado. Esta, hasta ahora, ha sido la mejor solución. La respuesta aceptada para arrojar caminos es ridícula.
Mesh
¿Qué cambió la entrada de ruta de registro para C: \ Archivos de programa (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ a? c: \ d \ sql?
OutOFTouch
Si te refieres a la variable de entorno PATH, entonces sí. No me metí con ninguna otra referencia a los directorios de SQL Server.
Juliano
Aquí hay un pequeño tutorial sobre enlaces duros: howtogeek.com/howto/16226/…
ofer.sheffer
1

Si bien el máximo permitido en la ruta es mucho más largo, he encontrado en las respuestas autorizadas de Stack Overflow sobre este tema (y referencias de Microsoft) que establecen que un valor de ruta expandido máximo de 2048 bytes funcionará, y cualquier cosa más larga que eso causará problemas. Por "expandido" quiero decir que cualquier variable denotada con% delimitadores tendrá sus valores insertados para convertirse en el valor expandido, y la longitud total expandida no debe exceder los 2048 bytes. He notado que los tipos de problemas que causa (a partir de Windows 7) son:

  • No reconoce rutas al final del valor
  • La instalación de software o parches que modifican el valor de RUTA hace que el valor de tiempo de ejecución se convierta en NULL, lo que causa todo tipo de problemas al ejecutar Windows, como todos los iconos del menú Inicio, el escritorio y la barra de tareas pierden sus imágenes, y comandos simples de símbolo del sistema como " ping "o" ipconfig ", el comando show no reconoce errores
  • Los programas de aplicación que dependen de los valores PATH fallan

Personalmente, recomiendo otros sistemas operativos además de Windows, pero si está atascado en él, entonces debe pasar sus horas eliminando las entradas de ruta, probando para asegurarse de que no rompa nada, y reduzca el valor de la ruta a 2048 bytes.

Jay Imerman
fuente
No está claro cómo responde esto a la pregunta del autor, al menos más, que las respuestas existentes, lo que proporciona evidencia real para respaldar sus declaraciones.
Ramhound