Слишком много папок в переменной пути

15

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

Мне было интересно, почему эти компании добавили свои папки в путь (возможно, чтобы было проще выполнять их программы?), И какие необходимы и которые я могу удалить. Если я удалю некоторые из них, я не смогу запустить программы? ( Вот то, что в настоящее время существует в пути)

CC Inc
источник
1
Я действительно не чувствую, что это особенно долго PATH... Что заставляет вас подозревать, что это слишком долго? VS сбрасывает какую-то ошибку? Кроме того, какую версию Windows вы используете?
Боско
@ Bosco Я подозреваю, что это слишком долго, потому что командная строка не может найти простые команды, такие как ping. Кроме того, кажется, что это не редкость для визуальной студии . Было также отмечено здесь , что предел для PATH с помощью командной строки составляет около 2000
CC Inc
Visual Studio 2012 выдает ошибку «Исключение было сгенерировано целью вызова» при запуске. И когда я посмотрел в ActivityLog.xml, он сказал мнеThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc
2
Все виды хаков и решений в принятом ответе на вопрос Stack Overflow # 4405091 :)
bosco

Ответы:

13

Можно уменьшить избыточное количество путей в переменных окружения PATH, просто сохранить всю строку в блокноте, в качестве резервной копии, удалить некоторые и протестировать.

Большинство из них есть, поэтому, если для ярлыка не задан полный путь для «Цели», если «Старт в» не установлен в ярлыке правильно, или запуск выполняется странным образом, их программа и ее части и части всегда нашел. Это Failsafe в большинстве ситуаций. Вы все еще хотите полностью протестировать любое использование любой программы, которую вы удалили.
Это также очень полезно для людей, которые вводят команды в CMDprompt, даже без CD компьютер будет сканировать каждое местоположение, пока программа с таким именем не будет найдена и запущена. Или любая другая команда с таким же именем :-)

Этот набор путей WAS (предшественник) ограничивался менее чем 255 (или 260) символами, который некоторое время назад изменился на 1024, а затем был исправлен обратно в эпоху server'03 для обработки 2048 и предположительно мог обрабатывать 8096 в некоторых системах, даже давно.

Реальные ограничения, обнаруженные сегодня, с которыми сталкиваются люди, заключаются в CMDprompt, который имеет ограничение на длину командной строки, которая включает в себя расширение переменных и путей.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx здесь Microsoft говорит:

«Максимальный размер определяемой пользователем переменной среды составляет 32 767 символов. Технических ограничений на размер блока среды нет. Однако существуют практические ограничения в зависимости от механизма, используемого для доступа к блоку. Например, пакетный файл не могу установить переменную, которая больше максимальной длины командной строки. "

В этом месте ^ они указывают на место в реестре, которое содержит системные пути. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment Остальное нужно прочитать там.

CMDprompt и пакетное ограничение составляют 2048 символов после расширения, и говорят, что это в 4 раза больше, чем для более новых систем (нуждается в цитировании, потому что люди этого не видят)

Также см. Http://support.microsoft.com/kb/830473 , где обсуждаются командная строка и длина пакета для более старых систем.

Чтобы убедиться, что записи там правильные, в вики есть что сказать:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% Эта переменная содержит разделенный точкой с запятой ( не ставьте пробелы между ними ) список каталогов, в которых интерпретатор команд будет искать исполняемый файл, соответствующий данной команде. Переменные среды, которые представляют пути, могут быть вложены в переменную PATH, но только на одном уровне косвенности. Если сама эта переменная среды подпути содержит переменную среды, представляющую путь, PATH не будет правильно расширяться при замене переменной.

Наличие всех дополнительных путей там немного замедляет некоторые вещи, потому что тогда он вынужден искать во всех этих местах, прежде чем он сдастся. Использование полных путей при вызове элементов файла всегда будет быстрее, даже при пакетной обработке или использовании CMDprompt.

Использование старых соглашений DOSlike 8.3 - один из способов уменьшить размер, этот пакет /programming//a/20362922 работает хорошо. не забудьте (снова) сделать резервную копию оригинальной строки. Смотрите также другие возможные решения по этому вопросу.

Вот как выглядит моя, было хуже.
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ QuickTime \ QTSystem \

Я бы быстро выбрал быстрое время, и программы AMD уже добавили туда расширенный путь, бросил его, у Adobee был один, ни один из них не имел значения для стандартных методов ярлыков / пиктограмм в графическом интерфейсе. Многие вещи можно удалить, затем протестируйте все функции. Если вы вызываете вещи, вводя приглашение CMD, удаление этих путей не будет работать.

Psycogeek
источник
То есть вы говорите, что приложения не выйдут из строя, если я удалю пути?
CC Inc
Windows 7 64-разрядная версия
CC Inc
Есть ли там что-нибудь, что, как вы знаете, уже удалено? Убери Qt, AMd и Nividia, (после того, как ты это сделал), Мэйби, и посмотри, достаточно ли она коротка? Я разместил мой, это около 140 символов.
Psycogeek
Хорошо, я посмотрю ..
CC Inc
3
Ограничение составляет 2048 символов . После этого я больше не могу вводить символы в графический интерфейс переменных среды.
Матин Улхак
9

На моем пути есть несколько переменных среды, связанных с разработкой программного обеспечения, и все они важны.

Вышеупомянутое решение не сработало бы для меня, поэтому я выбрал соединения каталогов :

  • Выберите некоторые из самых длинных путей в моем ПУТИ (как C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • Создайте небольшую папку для хранения моих соединений: c: \ d \
  • Создайте короткие соединения для длинных путей:

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

Выполнение этого по 15 путям уменьшило мой PATH с 2045 до 1285 символов.

Это может быть проблемой, когда вы, наконец, удалите материал со своего компьютера, так как соединения будут оставаться на пути, и вам придется очистить их вручную.

Жулиано
источник
1
У меня довольно типичная среда разработки, последняя версия VS + несколько старых версий и установленный SQL-сервер. Это до сих пор было лучшим решением. Принятый ответ бросить пути нелеп.
Сетка
Что вы изменили в записи пути к реестру для C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \? c: \ d \ sql?
OutOFTouch
Если вы имеете в виду переменную окружения PATH, тогда да. Я не связывался ни с какими другими ссылками на каталоги SQL Server.
Джулиано
Вот хороший небольшой учебник по жестким ссылкам: howtogeek.com/howto/16226/…
ofer.sheffer
1

Несмотря на то, что максимально допустимое значение в пути намного длиннее, я нашел в Stack Overflow официальные ответы на эту тему (и ссылки Microsoft), в которых говорится, что будет работать максимальное значение расширенного пути в 2048 байт, и все, что дольше этого, вызовет проблемы. Под "расширенным" я подразумеваю, что любые переменные, обозначенные разделителями%, будут вставлены в свои значения, чтобы стать расширенным значением, а общая расширенная длина не должна превышать 2048 байтов. Я заметил, что типы проблем, которые это вызывает (начиная с Windows 7):

  • Не распознает пути в конце значения
  • Установка программного обеспечения или исправлений, которые изменяют значение PATH, приводит к тому, что значение времени выполнения становится NULL, что приводит к возникновению всех видов проблем в Windows, таких как все значки «Пуск», «Рабочий стол» и «Панель задач», теряют свои изображения и простые команды командной строки, такие как « команда ping "или" ipconfig "не распознала ошибки
  • Прикладные программы, использующие значения PATH, не работают

Лично я рекомендую другие операционные системы, кроме Windows, но если вы застряли на ней, вам придется потратить часы на удаление записей пути, тестирование, чтобы убедиться, что оно ничего не нарушает, и получить значение пути до 2048 байт.

Джей Имерман
источник
Не ясно, как это отвечает на вопрос автора, по крайней мере, больше, чем существующие ответы, которые предоставляют фактические доказательства, подтверждающие их утверждения.
Ramhound