Was sind die technischen Gründe für die Beschränkung auf 1024 Zeichen?
Nachdem ich in den letzten 3 Jahren Linux verwendet habe, haben mich so viele Probleme mit Windows 7 Pro bei meiner täglichen Arbeit beschäftigt. Die verrücktesten sind das Dateinamenlimit und die Umgebungsvariable vergessen . Ich weiß, dass laut MSDN die Beschränkung für das kombinierte System ENV 1024 beträgt, aber warum? Ich habe eine große Benutzerpfadvariable festgelegt. Es funktioniert gut, es sei denn, ich lasse es für eine Weile auf. Dann hört es plötzlich auf, den PATH-Wert zu erkennen, bis ich neu starte.
Wie speichert Windows die ENV-Werte, die diese auferlegte Grenze verursachen würden? Wie würde dieser Wert durch normalen Gebrauch verfälscht?
MSDN https://support.microsoft.com/en-us/kb/906469
Aktualisieren Der Vollständigkeit halber beschreibe ich die Situationen, in denen das erwähnte Problem auftritt. Normalerweise stelle ich User Env PATH über den Umgebungsdialog in den Systemeinstellungen ein. Dinge wie msbuild, vstest.console.exe, tf.exe, die ich während der Entwicklung ausgeführt habe. In ConEmu verwende ich fast ausschließlich PowerShell v4. Nach ein paar Stunden oder einem Tag Betriebszeit reagieren diese Befehle plötzlich nicht mehr als erkannt. Durch Zurücksetzen oder Ändern der Werte über den Env-Dialog oder die Befehlszeile wird die Funktionalität nicht wiederhergestellt. Wenn Sie $ env: PATH wiederholen, werden die korrekten Werte angezeigt. Neustart war die einzige Lösung, die ich gefunden habe.
quelle
Why does Windows have a limit on environment variables at all?
Haben Linux und andere Betriebssysteme keine Grenzen? Wie können Sie eine Zeichenfolge länger als die maximale Zeichenfolge speichern, die Sie auf Ihrem System haben können? Wie kann ein Computer mit endlichem Adressbus und endlichem Speicher die String-Länge unbegrenzt lassen?Antworten:
Was sind die technischen Gründe für die Beschränkung auf 1024 Zeichen?
Das Limit, auf das Sie sich beziehen, ist nicht 1024 Byte. Wie in dem von Ihnen verlinkten Artikel erläutert, handelte es sich um einen Fehler, für den ein Hotfix verfügbar war.
Der Artikel sagt ausdrücklich, dass das Limit 2048 Bytes beträgt für die
CreateEnvironmentBlock
Funktion .Darüber hinaus betraf der Fehler zwei alte Windows-Versionen (XP und Server 2003).
Quelle Eine zurückgegebene Pfadumgebungsvariable wird auf einem Windows Server 2003- oder Windows XP-Computer auf 1.024 Byte gekürzt
Ist das Limit also 2048 Zeichen?
Das tatsächliche Limit beträgt 32.760 Zeichen. Es ist jedoch unwahrscheinlich, dass Sie dieses theoretische Maximum in der Praxis erreichen.
Eine Batchdatei ist durch die maximale Befehlszeilenlänge beschränkt, da die Umgebungsvariable in den Befehlszeilenpuffer des Batchprozessors passen muss.
Auf Computern mit Microsoft Windows XP oder höher beträgt die maximale Länge der Zeichenfolge, die Sie an der Eingabeaufforderung verwenden können, 8191 Zeichen.
Die Eingabeaufforderung ignoriert alle Umgebungsvariablen, die vom übergeordneten Prozess geerbt wurden und länger sind als die eigenen Beschränkungen von 8191 Zeichen.
Das Festlegen des Umgebungsregistrierungsschlüssels hat ein Zeichenlimit von 2048 im Code, der diesen Registrierungsschlüssel analysiert und daraus einen Umgebungsblock erstellt es.
Quellen unten dokumentiert.
Wie würde dieser Wert (
PATH
) durch normalen Gebrauch verfälscht werden?Wie später erläutert, kann dies beim System vorkommen
PATH
wird geändert, um länger als 1920 Zeichen zu sein.Sie haben in Ihrer Frage nicht genügend Informationen angegeben, um genau zu diagnostizieren, warum dies geschieht.
Ich habe einen großen Benutzer
PATH
VariablensatzEs gibt eine bestimmte Grenze für die
PATH
Umgebungsvariable.Damit für den Benutzer
PATH
Variable, die erfolgreich mit dem System zusammengeführt werden sollPATH
Variable das SystemPATH
Variable muss & lt; 1920 Zeichen.Quelle Wird echo% PATH% nur auf das System oder auch auf die Benutzervariablen ausgeweitet? Antwort per David Heffernan
Was sind die Grenzen für einen Dateipfad?
Quelle Benennen von Dateien, Pfaden und Namespaces
Was ist die maximale Länge einer Umgebungsvariablen?
Quelle Was ist die maximale Länge einer Umgebungsvariablen? von Raymond Chen (ein Microsoft-Mitarbeiter).
Eingabeaufforderung (
Cmd.exe
) Einschränkung der BefehlszeilenzeichenfolgeQuelle Beschränkung der Befehlszeilenzeichenfolge für die Eingabeaufforderung (Cmd.exe)
quelle