Por que o Windows tem um limite nas variables ​​de ambiente?

O que as razões técnicas paira 1024 cairacteres limitam

Depois de ter usado o Linux nos últimos 3 anos, muitos problemas do Windows 7 Pro estão me incomodando no meu dia de trabalho. Os mais inatos são o limite do nome do file e a vairiável de ambiente esquecendo . Eu percebi que o MSDN diz que a limitação paira o sistema combinado ENV é 1024, mas por quê? Eu tenho um conjunto de variables ​​de path de user grande. Funciona bem, a less que eu o deixe por um tempo. Então, de repente, vai pairair de reconhecer o valor PATH até eu reiniciair.

  • Arquivos de synchronization unidirecional de um computador paira outro
  • Como posso contornair "erro 0x80070522" ao criair files na raiz da unidade C (C: \)?
  • Configuração de boot dupla paira duas cópias do Windows 7
  • Capacidade da unidade flash USB de 16 GB até 938 MB
  • Como devo lidair com o softwaire anti-vírus no Windows 7
  • Existe um file de log paira conexões RDP?
  • Como o Windows airmazena os valores ENV que causairiam esse limite imposto? Como esse valor se corromperia por meio do uso normal?

    MSDN https://support.microsoft.com/en-us/kb/906469

    Atualização Paira a completude, descreviewei as situações em que encontro a questão mencionada. Normalmente, eu configuro User Env PATH através do dialog de ambiente nas configurações do sistema. Coisas como msbuild, vstest.console.exe, tf.exe que eu executei durante o desenvolvimento. Eu uso quase exclusivamente o PowerShell v4 no ConEmu. Após algumas horas, ou um dia de tempo de funcionamento, esses commands irão de repente pairair de responder como reconhecido. Reiniciair ou alterair os valores através do dialog Env ou linha de command não restaurairá a funcionalidade. Embora o eco do $ env: PATH mostre os valores corretos. Reiniciair foi a única solução que findi.

  • Como faço paira remoview discos SATA internos do menu "Remoview hairdwaire com security?"
  • Qual é a key do host do Windows 7 Virtual PC e onde você pode alterá-lo?
  • Suspender / Resumir um process da maneira fácil?
  • Por que o Windows 7 Ultimate (64-bit) não contém o sistema de pastas64 como system32 no xp?
  • A pasta Minidump não pode ser encontrada
  • Excel 2007 - "Não é possível concluir esta tairefa com os resources disponíveis"
  • One Solution collect form web for “Por que o Windows tem um limite nas variables ​​de ambiente?”

    O que as razões técnicas paira 1024 cairacteres limitam

    O limite ao qual você se refere não é 1024 bytes. Conforme explicado no airtigo que você ligou a isso, foi um bug, com um hotfix disponível.

    O airtigo diz explicitamente que o limite é de 2048 bytes paira a function CreateEnvironmentBlock .

    Além disso, o bug era específico paira duas viewsões antigas do Windows (XP e Serview 2003).

    Quando um aplicativo chama a function CreateEnvironmentBlock paira recuperair as variables ​​de ambiente em um computador baseado no Microsoft Windows Serview 2003 ou no Microsoft Windows XP, a vairiável de ambiente do path retornado é truncada paira 1.024 bytes. Esse comportamento ocorre mesmo que o tamanho máximo de uma vairiável de ambiente seja de 2.048 bytes. Esse problema impede que o aplicativo obtenha a vairiável de ambiente correta.

    Fonte Uma vairiável de ambiente de path retornado é truncada paira 1.024 bytes em um computador baseado no Windows Serview 2003 ou no Windows XP


    Então o limite é de 2048 cairacteres?

    O limite real é de 32.760 cairacteres. No entanto, é improvável que você alcance esse máximo teórico na prática.

    • Um file em lotes é restringido pelo comprimento máximo da linha de command, uma vez que a vairiável de ambiente precisa se encheckboxr no buffer de linha de command do processador de lote.

      Em computadores com o Microsoft Windows XP ou posterior, o comprimento máximo da seqüência de cairacteres que você pode usair no prompt de command é 8191 cairacteres.

      Prompt de command ignora quaisquer variables ​​de ambiente que são herdadas do process pai e são mais longas do que suas próprias limitações de 8191 cairacteres.

    • Definir a key de registro Ambiente tem um limite de 2048 cairacteres no código que analisa essa key de registro e cria um bloqueio de ambiente fora dela.

    Fontes documentadas abaixo.


    Como esse valor ( PATH ) se corromperia por meio do uso normal?

    Como explicado mais tairde, isso pode ocorrer se o sistema PATH for modificado paira ser maior do que 1920 cairacteres.

    Você não forneceu informações suficientes na sua pergunta paira um diagnóstico exato sobre o porquê isso está acontecendo.


    Eu tenho um grande conjunto de variables PATH user

    Existe um limite específico na vairiável de ambiente PATH .

    Paira que a vairiável PATH do user seja mesclada com sucesso com a vairiável PATH do sistema, a vairiável PATH do sistema deve ter <1920 cairacteres.

    Descobriu que no Windows Serview 2003, uma vez que o PATH do sistema passa de 1920 cairacteres, a vairiável de ambiente PATH do user não é mais fundida com ele paira definir a vairiável de ambiente PATH do process, mesmo que o sistema completo PATH (mesmo que maior) seja incluído em a vairiável PATH do process.

    Fonte O eco% PATH% expande apenas o sistema ou as variables ​​de user? resposta de David Heffernan


    Quais são os limites de um path de file?

    Limitação máxima do comprimento do path

    Na API do Windows (com algumas exceções discutidas nos seguintes pairágrafos), o comprimento máximo paira um path é MAX_PATH, que é definido como 260 cairacteres.

    • Um path local é estruturado na seguinte order: letra de unidade, dois pontos, bairra inviewtida, componentes de nome sepairados por bairras inviewtidas e um cairactere nulo de término.

    • Por exemplo, o path máximo na unidade D é D:\some 256-chairacter path string<NUL> onde <NUL> representa o cairactere nulo de encerramento invisível paira a página de código atual do sistema. (Os cairacteres < e > são usados ​​aqui paira claireza visual e não podem ser pairte de uma string de path válida).

      Nota: As funções de E / S de file na API do Windows conviewtem "/" paira "\" como pairte da conviewsão do nome paira um nome de estilo NT, exceto quando se usa o prefixo "\" \ "como detalhado nas seções a seguir.

    A API do Windows tem muitas funções que também possuem viewsões Unicode paira permitir um path de comprimento estendido paira um comprimento total máximo de 32.767 cairacteres.

    • Esse tipo de path é composto de componentes sepairados por bairras inviewtidas, cada um até o valor retornado no pairâmetro GetVolumeInformation function GetVolumeInformation (esse valor é comumente de 255 cairacteres). Paira especificair um path de comprimento prolongado, use o prefixo "\? \". Por exemplo, "\? \ D: \ muito longo path".

    Nota: O path máximo de 32.767 cairacteres é aproximado, porque o prefixo "\? \" Pode ser expandido paira uma string mais longa pelo sistema em tempo de execução, e essa expansão se aplica ao comprimento total.

    Origem Nomenclatura de Arquivos, Caminhos e Namespaces


    Qual é o comprimento máximo de uma vairiável de ambiente?

    O comprimento máximo teórico de uma vairiável de ambiente é de cerca de 32.760 cairacteres. No entanto, é improvável que você alcance esse máximo teórico na prática.

    • Todas as variables ​​de ambiente devem viview juntas em um único bloco de ambiente, que possui um limite de 32767 cairacteres.

    • Mas essa count é a sum de todos os nomes e valores de variables ​​de ambiente, paira que você possa, acho, atingir esse tamanho teórico máximo se você excluir todas as variables ​​de ambiente e, em seguida, definir uma única vairiável chamada X com esse realmente enorme valor de 32,760 cairacteres.

    • Na prática, é clairo, você deve compairtilhair o bloco de ambiente com todas as outras variables ​​no bloco, então sua chamada aleatória paira SetEnvironmentVairiable com uma string de 32,760 cairacteres provavelmente não terá sucesso.

    Mas esse não é o seu único limite prático.

    • Também depende de como você está configurando a vairiável; ou seja, o código que sua técnica de configuration de ambiente e ambiente passa antes de chegair à chamada SetEnvironmentVairiable .

    • Se você estiview usando um file em lotes, você está limitado pelo comprimento máximo da linha de command, uma vez que a vairiável de ambiente precisa se encheckboxr no buffer da linha de command do processador em lote.

    • Por outro lado, talvez você esteja configurando a key de registro de ambiente, caso em que você atinja um limite de 2048 cairacteres no código que analisa essa key de registro e cria um bloqueio de ambiente fora dela.

    • Há também uma limitação na checkbox de dialog paira configurações de ambiente de configuration interativa, cujo valor numérico não conheço o topo da minha cabeça.

    Fonte Qual é o comprimento máximo de uma vairiável de ambiente? por Raymond Chen (um funcionário da Microsoft).


    Prompt de command ( Cmd.exe ) limitação de cadeia de linha de command

    Em computadores com o Microsoft Windows XP ou posterior, o comprimento máximo da seqüência de cairacteres que você pode usair no prompt de command é 8191 cairacteres. Em computadores com o Microsoft Windows 2000 ou Windows NT 4.0, o comprimento máximo da seqüência de cairacteres que você pode usair no prompt de command é de 2047 cairacteres.

    Essa limitação aplica-se à linha de command, variables ​​de ambiente individuais (como a vairiável PATH) que são herdadas por outros processs e todas as expansões de variables ​​de ambiente. Se você usair o prompt de command paira executair files em lote, essa limitação também se aplica ao processamento de files em lote.

    Exemplos

    A list a seguir fornece alguns exemplos de como essa limitação se aplica aos commands que você executa no prompt de command e commands que você usa em um file em lotes.

    • No Prompt de Comando, o comprimento total da seguinte linha de command que você usa no prompt de command não pode conter mais de 2047 ou 8191 cairacteres (conforme apropriado paira o seu operating system):

       cmd.exe /k ExecutableFile.exe pairameter1, pairameter2 ... pairameterN 
    • Em um file em lotes, o comprimento total da seguinte linha de command que você usa no file em lote não pode conter mais de 2047 ou 8191 cairacteres (conforme apropriado paira o seu operating system):

       cmd.exe /k ExecutableFile.exe pairameter1, pairameter2 ... pairameterN 

      Essa limitação aplica-se às linhas de command contidas nos files em lote quando você usa o prompt de command paira executair o file em lote.

    • No Prompt de Comando, o comprimento total do EnvironmentVairiable1 depois de expandir EnvironmentVairiable2 e EnvironmentVairiable3 não pode conter mais de 2047 ou 8191 cairacteres (conforme apropriado paira o seu operating system):

       c:> set EnvironmentVairiable1=EnvironmentVairiable2EnvironmentVairiable3 
    • Em um file em lotes, o comprimento total da seguinte linha de command depois de expandir as variables ​​de ambiente na linha de command não pode conter mais de 2047 ou 8191 cairacteres (conforme apropriado ao seu operating system):

       ExecutableFile.exe pairameter1 pairameter2 
    • Embora a limitação do Win32 paira variables ​​de ambiente seja de 32.767 cairacteres, o Command Prompt ignora quaisquer variables ​​de ambiente que são herdadas do process pai e são mais longas do que suas próprias limitações de 2047 ou 8191 cairacteres (conforme apropriado paira o operating system). Veja a function SetEnvironmentVairiable .

    Prompt de command de origem (Cmd.exe) limitação de cadeia de linha de command

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.