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).
Wenn eine Anwendung die CreateEnvironmentBlock-Funktion aufruft, um die Umgebungsvariablen auf einem Microsoft Windows Server 2003- oder Microsoft Windows XP-Computer abzurufen, wird die zurückgegebene Pfadumgebungsvariable auf 1.024 Byte gekürzt. Dieses Verhalten tritt auf, obwohl die maximale Größe einer Umgebungsvariablen 2.048 Byte beträgt. Dieses Problem verhindert, dass die Anwendung die richtige Umgebungsvariable abruft.
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
Variablensatz
Es gibt eine bestimmte Grenze für die PATH
Umgebungsvariable.
Damit für den Benutzer PATH
Variable, die erfolgreich mit dem System zusammengeführt werden soll PATH
Variable das System PATH
Variable muss & lt; 1920 Zeichen.
Fand heraus, dass der Benutzer unter Windows Server 2003 1920 Zeichen übergibt, sobald der Systempfad übergeben wurde PATH
Die Umgebungsvariable wird nicht mehr mit ihr zusammengeführt, um den Prozess festzulegen PATH
Umgebungsvariable, obwohl das gesamte System PATH
(auch wenn größer) wird in den Prozess einbezogen PATH
Variable.
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?
Maximale Pfadlängenbegrenzung
In der Windows-API (mit einigen Ausnahmen, die im Folgenden erläutert werden)
Absätze) ist die maximale Länge für einen Pfad MAX_PATH
definiert als 260 Zeichen.
Ein lokaler Pfad ist in der folgenden Reihenfolge strukturiert: Laufwerkbuchstabe, Doppelpunkt, umgekehrter Schrägstrich, durch umgekehrte Schrägstriche getrennte Namenskomponenten und a
Nullzeichen beenden.
Beispielsweise ist der maximale Pfad auf Laufwerk D D:\some 256-character path string<NUL>
woher <NUL>
repräsentiert die unsichtbare Terminierung
Nullzeichen für die aktuelle System-Codepage. (Die Charaktere <
und >
dienen hier der visuellen Klarheit und können nicht Teil einer gültigen sein
Pfadzeichenfolge.)
Hinweis: Datei-E / A-Funktionen in der Windows-API konvertieren "/" nach "\" als
Teil der Konvertierung des Namens in einen Namen im NT-Stil, außer bei Verwendung der
"\? \" Präfix, wie in den folgenden Abschnitten beschrieben.
Die Windows-API verfügt über viele Funktionen, die auch Unicode-Versionen enthalten
Erlaube einen längeren Pfad für eine maximale Gesamtpfadlänge von
32.767 Zeichen.
- Dieser Pfadtyp setzt sich aus durch Backslashes getrennten Komponenten zusammen, die jeweils bis zu dem in der zurückgegebenen Wert reichen
lpMaximumComponentLength
Parameter der GetVolumeInformation
function (dieser Wert besteht normalerweise aus 255 Zeichen). Angeben eines
Verwenden Sie für Pfade mit erweiterter Länge das Präfix "\? \". Zum Beispiel "\? \ D: \ very
langer Weg ".
Hinweis: Der maximale Pfad von 32.767 Zeichen ist ungefähr, weil
Das Präfix "\? \" kann vom System unter zu einer längeren Zeichenfolge erweitert werden
Laufzeit, und diese Erweiterung gilt für die Gesamtlänge.
Quelle Benennen von Dateien, Pfaden und Namespaces
Was ist die maximale Länge einer Umgebungsvariablen?
Die theoretische maximale Länge einer Umgebungsvariablen beträgt ca. 32.760 Zeichen. Es ist jedoch unwahrscheinlich, dass Sie dieses theoretische Maximum in der Praxis erreichen.
Alle Umgebungsvariablen müssen in einem einzigen Umgebungsblock zusammenleben, der selbst eine Begrenzung von 32767 Zeichen aufweist.
Diese Anzahl ist jedoch die Summe aller Umgebungsvariablennamen und -werte. Sie könnten also, denke ich, diese theoretische maximale Länge erreichen, wenn
Sie haben alle Umgebungsvariablen gelöscht und dann eine einzige festgelegt
Variable mit dem Namen X und einem wirklich riesigen Wert von 32.760 Zeichen.
In der Praxis müssen Sie natürlich den Umgebungsblock mit allen anderen Variablen im Block teilen, damit Sie Ihren zufälligen Aufruf an SetEnvironmentVariable
mit einer 32.760-Zeichenfolge ist das unwahrscheinlich
gelingen.
Dies ist jedoch nicht Ihre einzige praktische Grenze.
Dies hängt auch davon ab, wie Sie die Variable einstellen. d.h. der Code, den Ihre Technik zum Festlegen von Umgebungsvariablen zuvor durchlaufen hat
es kommt zum SetEnvironmentVariable
Anruf.
Wenn Sie eine Stapeldatei verwenden, ist die maximale Befehlszeilenlänge begrenzt, da die Umgebungsvariable angepasst werden muss
der Kommandozeilenpuffer des Batch-Prozessors.
Andererseits legen Sie möglicherweise den Registrierungsschlüssel "Environment" fest. In diesem Fall ist der Code auf 2048 Zeichen beschränkt
Dadurch wird dieser Registrierungsschlüssel analysiert und ein Umgebungsblock daraus erstellt
es.
Es gibt auch eine Einschränkung im Dialogfeld zum interaktiven Festlegen von Umgebungsvariablen, deren numerischer Wert ich nicht habe
zufällig aus dem Kopf wissen.
Quelle Was ist die maximale Länge einer Umgebungsvariablen? von Raymond Chen (ein Microsoft-Mitarbeiter).
Eingabeaufforderung ( Cmd.exe
) Einschränkung der Befehlszeilenzeichenfolge
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. Auf Computern unter Microsoft Windows 2000 oder Windows NT 4.0 beträgt die maximale Länge der Zeichenfolge, die Sie an der Eingabeaufforderung verwenden können, 2047 Zeichen.
Diese Einschränkung gilt für die Befehlszeile, einzelne Umgebungsvariablen (z. B. die Variable PATH), die von anderen Prozessen geerbt werden, und alle Erweiterungen von Umgebungsvariablen. Wenn Sie zum Ausführen von Batchdateien die Eingabeaufforderung verwenden, gilt diese Einschränkung auch für die Verarbeitung von Batchdateien.
Beispiele
Die folgende Liste enthält einige Beispiele dafür, wie diese Einschränkung auf Befehle angewendet wird, die Sie in der Eingabeaufforderung ausführen, sowie auf Befehle, die Sie in einer Batchdatei verwenden.
In der Eingabeaufforderung darf die Gesamtlänge der folgenden Befehlszeile, die Sie an der Eingabeaufforderung verwenden, nicht mehr als beides enthalten
2047 oder 8191 Zeichen (je nach Betriebssystem):
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
In einer Batchdatei darf die Gesamtlänge der folgenden Befehlszeile, die Sie in der Batchdatei verwenden, nicht mehr als 2047 oder 8191 enthalten
Zeichen (je nach Betriebssystem):
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
Diese Einschränkung gilt für Befehlszeilen, die im Batch enthalten sind
Dateien, wenn Sie die Eingabeaufforderung verwenden, um die Batchdatei auszuführen.
In der Eingabeaufforderung kann die Gesamtlänge von EnvironmentVariable1 nach dem Erweitern von EnvironmentVariable2 und EnvironmentVariable3 nicht angegeben werden
Enthält mehr als 2047 oder 8191 Zeichen (je nach Bedarf)
Ihr Betriebssystem):
c:> set EnvironmentVariable1=EnvironmentVariable2EnvironmentVariable3
In einer Batchdatei kann die Gesamtlänge der folgenden Befehlszeile nach dem Erweitern der Umgebungsvariablen in der Befehlszeile nicht
Enthält mehr als 2047 oder 8191 Zeichen (je nach Bedarf)
Ihr Betriebssystem):
ExecutableFile.exe parameter1 parameter2
Obwohl die Win32-Beschränkung für Umgebungsvariablen 32.767 Zeichen beträgt, ignoriert die Eingabeaufforderung alle Umgebungsvariablen
Diese werden vom übergeordneten Prozess geerbt und sind länger als der eigene
Einschränkungen von entweder 2047 oder 8191 Zeichen (je nach
Betriebssystem). Sehen SetEnvironmentVariable-Funktion .
Quelle Beschränkung der Befehlszeilenzeichenfolge für die Eingabeaufforderung (Cmd.exe)