Muitas pastas na variável de caminho

15

Eu encontrei um problema estranho - não consigo iniciar o Visual Studio, nem executar comandos simples no prompt de comando, aparentemente devido à minha variável PATH ser muito longa. Agora que olho para isso, vejo que muitas empresas adicionaram seus diretórios de instalação à variável PATH.

Fiquei me perguntando por que essas empresas adicionaram suas pastas ao caminho (talvez para simplificar a execução de seus programas?) E quais são necessárias e quais posso excluir. Se eu excluir alguns deles, não poderei iniciar os programas? ( Aqui está o que existe atualmente no caminho)

CC Inc
fonte
1
Eu realmente não sinto que isso seja particularmente longo PATH... O que leva você a suspeitar que é muito longo? O VS está lançando algum tipo de erro? Além disso, qual versão do Windows você está executando?
bosco
@bosco Eu suspeito que seja muito longo, porque o prompt de comando não consegue encontrar comandos simples como ping. Além disso, parece que isso não é incomum no visual studio . Foi também mencionado aqui que o limite para o caminho usando linha de comando é de cerca de 2000.
CC Inc
O Visual studio 2012 lança o erro "A exceção foi lançada pelo destino de uma invocação" na inicialização. E quando eu olhei no ActivityLog.xml, ele me disseThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc
2
Todos os tipos de hacks e soluções em resposta aceite da questão de estouro de pilha # 4405091 :)
bosco

Respostas:

13

é possível reduzir a quantidade excessiva de caminhos nas variáveis ​​de ambiente PATH, basta salvar a linha inteira em um bloco de notas, como um backup, remover alguns e testar.

A maioria deles existe, portanto, se um atalho não tiver um caminho completo definido para o "Destino", se o "Iniciar em" não estiver definido corretamente no atalho ou se um lançamento for feito estranhamente, seu programa e suas partes e partes serão sempre encontrado. É um à prova de falhas na maioria das situações. Você ainda deseja testar completamente qualquer uso de qualquer programa que tenha removido seus caminhos.
Também é muito útil para as pessoas que digitam comandos no CMDprompt, mesmo sem um CD, o computador verifica cada local até que um programa com esse nome seja encontrado e executado. Ou qualquer outro comando com o mesmo nome :-)

Esse conjunto de caminhos foi limitado a menos de 255 (or260) charachters, que mudaram para 1024 há muito tempo, e foram remendados na era server'03 para lidar com 2048, e supostamente podiam lidar com 8096 em alguns sistemas, até muito tempo atras.

As verdadeiras limitações descobertas hoje em que as pessoas se deparam estão no CMDprompt, que tem um limite no comprimento da cadeia de comandos, que inclui a expansão das variáveis ​​e caminhos.

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

"O tamanho máximo de uma variável de ambiente definida pelo usuário é 32.767 caracteres. Não há limitações técnicas no tamanho do bloco de ambiente. No entanto, existem limites práticos dependendo do mecanismo usado para acessar o bloco. Por exemplo, um arquivo em lotes não pode definir uma variável maior que o comprimento máximo da linha de comando ".

Nesse local ^, eles apontam para o local do registro que contém os caminhos do sistema. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment Deve ler o restante lá.

O CMDprompt e a limitação de lote são 2048 caracteres uma vez expandidos, e diz-se que é 4x o maior para os sistemas mais recentes (precisa de citação porque as pessoas não estão vendo isso)

Consulte também http://support.microsoft.com/kb/830473 , que discute o prompt de comando e o tamanho do lote para sistemas mais antigos.

Para garantir que as entradas estejam corretas, o wiki tem o seguinte a dizer:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% Essa variável contém uma lista de diretórios delimitados por ponto-e-vírgula ( não coloque espaços no meio ) nos quais o interpretador de comandos procurará um arquivo executável que corresponda ao comando fornecido. Variáveis ​​de ambiente que representam caminhos podem ser aninhadas na variável PATH, mas apenas em um nível de indireção. Se a própria variável de ambiente do subcaminho contiver uma variável de ambiente representando um caminho, o PATH não será expandido corretamente na substituição da variável.

Ter todos os caminhos extras lá diminui bastante algumas coisas, porque é forçado a procurar em todos esses lugares, antes que desista. O uso de caminhos completos sempre que chamar itens de arquivo será sempre mais rápido, mesmo quando estiver em lote ou usando o CMDprompt.

O uso de convenções antigas do tipo 8.3 é uma maneira de reduzir o tamanho, este Lote /programming//a/20362922 funciona bem. certifique-se (novamente) de fazer backup da sequência original. Veja também as outras soluções possíveis nessa pergunta.

Aqui está a minha aparência, tem sido pior.
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Arquivos de Programas (x86) \ QuickTime \ QTSystem \

Eu jogava fora o quicktime em um piscar de olhos, e os programas da AMD colocavam um caminho extenso lá antes, lançavam-no, Adobee tinha um, nenhum deles importava para os métodos padrão de atalho / ícone da GUI. Muitas coisas podem ser removidas e teste todas as funções. Se você chamar as coisas digitando no prompt do CMD, a remoção desses caminhos não funcionará.

Psycogeek
fonte
Então você está dizendo que os aplicativos não falharão se eu remover os caminhos?
quer
Windows 7 de 64 bits
CC Inc
Existe algo lá que você sabe que já está desinstalado? Retire Qt, AMd e Nividia, (depois de fazer backup) mabey e veja se é curto o suficiente? Eu postei o meu, tem cerca de 140 caracteres.
Psycogeek 22/08
Ok, eu vou ver ..
CC Inc
3
A limitação parece ter 2048 caracteres . Após esse ponto, não consigo mais inserir caracteres na GUI de variáveis ​​de ambiente.
Mateen Ulhaq
9

Tenho várias variáveis ​​de ambiente relacionadas ao desenvolvimento de software no meu caminho, todas importantes.

A solução acima não funcionaria para mim, então fui para junções de diretório :

  • Selecione alguns dos caminhos mais longos no meu PATH (Curtir C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • Crie uma pequena pasta para armazenar minhas junções: c: \ d \
  • Crie junções curtas para caminhos longos:

mklink / jc: \ d \ sql "C: \ Arquivos de programas (x86) \ Microsoft SQL Server \ 100 \ Ferramentas \ Binn \ VSShell \ Common7 \ IDE \"

Fazer isso em 15 caminhos reduziu meu PATH de 2045 para 1285 caracteres.

Pode ser um problema quando você finalmente desinstalar itens da sua máquina, pois as junções permanecerão no caminho e você precisará limpá-las manualmente.

Juliano
fonte
1
Eu tenho um ambiente de desenvolvimento bastante típico, o VS + mais recente, várias versões mais antigas e o SQL Server instalado. Até agora, essa foi a melhor solução. A resposta aceita para abrir caminhos é ridícula.
Malha
O que você alterou para o C: \ Arquivos de Programas (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \? c: \ d \ sql?
OutOFTouch
Se você quer dizer a variável de ambiente PATH, então sim. Não mexi em nenhuma outra referência aos diretórios do SQL Server.
Juliano
Aqui está um pequeno tutorial interessante sobre links físicos
ofer.sheffer
1

Embora o máximo permitido no caminho seja muito maior, encontrei nas respostas autorizadas do Stack Overflow sobre este tópico (e referências da Microsoft) que afirmam que um valor máximo do caminho expandido de 2048 bytes funcionará e qualquer coisa maior que isso causará problemas. Por "expandido", quero dizer que todas as variáveis ​​indicadas com% delimitadores terão seus valores inseridos para se tornarem o valor expandido, e o comprimento total expandido não deve exceder 2048 bytes. Percebi que os tipos de problemas que ele causa (no Windows 7) são:

  • Não reconhece caminhos no final do valor
  • A instalação de software ou patches que modificam o valor PATH faz com que o valor de tempo de execução se torne NULL, causando todos os tipos de problemas com o Windows, como todos os ícones do Menu Iniciar, da área de trabalho e da Barra de tarefas, perdem suas imagens e comandos simples do prompt de comando como " comando show "ping" ou "ipconfig" show not reconheceu erros
  • Os programas aplicativos que dependem dos valores PATH falham

Pessoalmente, recomendo outros sistemas operacionais além do Windows, mas se você estiver preso a ele, precisará gastar horas removendo entradas de caminho, testando para garantir que não quebra nada e reduzindo o valor do caminho para 2048 bytes.

Jay Imerman
fonte
Não está claro como isso responde à pergunta do autor, pelo menos mais, do que as respostas existentes, o que fornece evidências reais para fazer backup de suas declarações.
Ramhound 22/07/2015