какие технические причины 1024 символов
ограничение не 1024 байта. Как описано в статье, связанной с этой ошибкой, доступно исправление.
статья явно говорит, что предел составляет 2048 байт на CreateEnvironmentBlock
функции.
кроме того, ошибка была характерна для двух старых версий Windows (XP и Server 2003).
когда приложение вызывает Функция CreateEnvironmentBlock для получения переменных среды на компьютере под управлением Microsoft Windows Server 2003 или Microsoft Windows XP возвращаемая переменная среды path усекается до 1024 байт. Это происходит, даже если максимальный размер переменной среды составляет 2048 байт. Эта проблема не позволяет приложению получить правильную переменную среды.
Source возвращаемая переменная среды path усекается до 1024 байт на компьютере под управлением Windows Server 2003 или Windows XP
так это предел 2048 символов?
фактическое ограничение составляет 32 760 символов. Однако на практике вы вряд ли достигнете этого теоретического максимума.
пакетный файл ограничен максимальной длиной командной строки, поскольку переменная среды должна помещаться в буфер командной строки пакетного процессора.
на компьютерах под управлением Microsoft Windows XP или более поздней версии максимальная длина строки, которую можно использовать в командной строке составляет 8191 символ.
Командная строка игнорирует все переменные среды, унаследованные от родительского процесса и превышающие собственные ограничения в 8191 символ.
настройка раздела реестра среды имеет ограничение в 2048 символов в коде, который анализирует этот раздел реестра и создает блок окружающей среды из
она.
источники описаны ниже.
как бы это значение (PATH
) повреждены при нормальном использовании?
как пояснили позже, это может произойти, если система PATH
изменен, чтобы быть больше, чем 1920 символов.
вы не предоставили достаточно информации в своем вопросе для точного диагноза о том, почему это происходит.
у меня есть большой пользователь PATH
переменная
существует определенный предел на PATH
переменные среды.
для <пользователей!--5 -- > переменная для успешного слияния с системой PATH
переменной системы PATH
переменная должна быть < 1920 символов.
выяснил, что на Windows Server 2003, как только системный путь проходит 1920 символов, пользователь PATH
переменная окружения больше не объединяется с ней для установки процесса PATH
переменная окружения, даже если полная система PATH
(даже если больше) будет включен в процесс PATH
переменной.
Source расширяется ли echo %PATH% только до системных или пользовательских переменных? ответ David Heffernan
какие ограничения на путь к файлу?
Ограничение Максимальной Длины Пути
в Windows API (за некоторыми исключениями, описанными ниже
абзацы), максимальная длина пути-MAX_PATH, который является
определяется как 260 символов.
локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, компоненты имени, разделенные обратной косой чертой, и a
завершающий символ null.
например, максимальный путь на диске D D:\some 256-character path string<NUL>
здесь <NUL>
представляет незримый прекращать
символ null для текущей системной кодовой страницы. (Символы <
и >
использованы здесь для визуально ясности и не могут быть частью действительного
строка пути.)
Примечание: функции файлового ввода-вывода в Windows API преобразуют " / " в " \ " как
часть преобразования имени В имя в стиле NT, за исключением
"\?\" префикс как описано в следующих разделах.
API Windows имеет много функций, которые также имеют версии Unicode для
разрешить путь расширенной длины для максимальной общей длины пути
32 767 символов.
- этот тип Пути состоит из компонентов, разделенных обратными косыми чертами, каждая до значения, возвращаемого в
lpMaximumComponentLength
параметр GetVolumeInformation
функция (это значение обычно 255 символов). Указать
путь расширенной длины, используйте"\?\" префикс. Например, "\?\D:\very
длинный путь."
Примечание: максимальный путь составляет 32767 символов приблизительно, потому что
в"\"?\ "префикс может быть расширен до более длинной строки системой в
время выполнения, и это расширение применяется к общей длине.
Source именование файлов и имен
какова максимальная длина переменной среды?
теоретическая максимальная длина переменной окружения составляет около 32 760 символов. Однако вы вряд ли достигнете этого теоретический максимум, на практике.
все переменные среды должны жить вместе в одном блоке среды, который сам по себе имеет ограничение в 32767 символов.
но это количество является суммой по всем именам и значениям переменных среды, поэтому вы можете, я думаю, поразить эту теоретическую максимальную длину, если
вы удалили все переменные среды, а затем установили одну
переменная с именем X с этим действительно огромным 32,760-символьным значение.
на практике, конечно, вы должны использовать блок среды со всеми другими переменными в блоке, так что ваш случайный вызов
SetEnvironmentVariable
С 32,760-буквенная вряд ли
преуспевать.
но это не единственный практический предел.
это также зависит от того, как вы устанавливаете переменную; т. е. код, который проходит ваша техника настройки переменной среды до
он добирается до SetEnvironmentVariable
звонок.
если вы используете пакетный файл, то вы ограничены максимальной длиной командной строки, так как переменная среды должна вписываться в
буфер командной строки пакетного процессора.
С другой стороны, возможно, вы устанавливаете ключ реестра среды, и в этом случае вы столкнетесь с ограничением в 2048 символов в коде
это анализирует раздел реестра и создает среду блок из
она.
в диалоговом окне также есть ограничение для интерактивной настройки переменных среды, числовое значение которых я не
знаете, с верхней части моей головы.
Source какова максимальная длина переменной среды? Рэймонда Чена (сотрудника Microsoft).
Командная строка (Cmd.exe
командная строка) строка ограничение
на компьютерах под управлением Microsoft Windows XP или более поздней версии максимальная длина строки, которую можно использовать в командной строке составляет 8191 символ. На компьютерах под управлением Microsoft Windows 2000 или Windows NT 4.0 максимальная длина строки, которую вы можете использовать в командной строке-2047 символов.
это ограничение применяется к командной строке, отдельным переменным среды (например, переменной PATH), которые наследуются другими процессы и все расширения переменных среды. Если для запуска пакетных файлов используется Командная строка, это ограничение также применяется к пакетной обработке файлов.
примеры
в следующем списке приведены примеры применения этого ограничения к командам, выполняемым в командной строке, и командам, используемым в пакетном файле.
в командной строке, общая длина следующей командной строки вы используете в командной строке не может содержать больше, чем
2047 или 8191 символ (в зависимости от операционной системы):
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
в пакетном файле общая длина следующей командной строки, используемой в пакетном файле, не может превышать 2047 или 8191
символы (в зависимости от операционной системы):
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
это ограничение применяется к командным строкам, содержащимся в пакете
файлы при использовании Командная строка для запуска пакетного файла.
в командной строке общая длина EnvironmentVariable1 после расширения EnvironmentVariable2 и EnvironmentVariable3 не может
содержат более 2047 или 8191 символов (в зависимости от
ваша операционная система):
c:> set EnvironmentVariable1=EnvironmentVariable2EnvironmentVariable3
в пакетном файле общая длина следующей командной строки после развертывания переменных среды в командной строке не может
содержать больше чем 2047 или 8191 символ (в зависимости от
ваша операционная система):
ExecutableFile.exe parameter1 parameter2
несмотря на то, что Win32 ограничение для переменных среды 32 767 символов, Командная строка игнорирует любые переменные среды
которые наследуются от родительского процесса и являются более длинными, чем его собственный
ограничения 2047 или 8191 символов (в зависимости от
операционная система.) См.функции SetEnvironmentVariable.
Source командная строка (Cmd.exe) ограничение строки командной строки