Environment.GetEnvironmentVariable () не удается найти существующие переменные [duplicate]

  Указанный ключ слишком длинный;  max длина ключа составляет 767 байт  

Это сообщение вы получили, потому что 1 байт равен 1 символу, только если вы используете набор символов latin-1 . Если вы используете utf8 , каждый символ будет считаться 3 байтами при определении вашего столбца ключа. Если вы используете utf8mb4 , каждый символ будет считаться 4 байтами при определении вашего столбца ключа. Таким образом, вам нужно умножить предел символов вашего ключевого поля на, 1, 3 или 4 (в моем примере), чтобы определить количество байт, которые ключевое поле пытается разрешить. Если вы используете uft8mb4, вы можете определить только 191 символ для собственного поля InnoDB, primary key. Просто не нарушайте 767 байт.

10
задан Lemmerich 8 October 2012 в 14:40
поделиться

4 ответа

Читайте здесь для получения дополнительной информации:

Использование переменных среды System Wide в .NET Application


В частности:

Что такое переменные среды системы?

Переменные среды - это строки, которые сохраняют информацию обо всей среде вашей системы. Эти строковые значения являются динамическими, и они могут влиять на поведение вашей системы. Переменные среды можно разделить на два основных типа:

Системные переменные: они влияют на всю систему независимо от текущего пользователя. Они определяются Windows и сохраняются в реестре. Вы должны быть администратором, чтобы иметь возможность изменять их. Обычно вам необходимо перезагрузить компьютер, чтобы сделать эти изменения эффективными.

Пользовательские переменные: они влияют на текущую среду текущего пользователя системы. Они могут быть удалены, изменены и добавлены любым системным пользователем. Они используются установкой Windows некоторыми программами и пользователями. Изменения этих переменных сохраняются в реестре и будут действовать немедленно.


Если вы попытаетесь вызвать переменную среды, которая не существует на вашем компьютере, у вас возникнут проблемы. Вы должны пытаться найти переменную, которая существует на вашей локальной машине, но не на главной машине вашего веб-сервиса.

8
ответ дан sergserg 17 August 2018 в 12:20
поделиться
  • 1
    В этом и заключается проблема, переменная существует как на системном, так и на уровне пользователя на главной машине = /. Я создал консольное приложение, чтобы проверить переменную, и она работает (показывает значение, которое я ожидаю), но когда я вызываю ws, размещенную на iis на той же машине, тот же метод возвращает пустое значение. – Lemmerich 8 October 2012 в 14:21
  • 2
    Oh c ***, и все, что мне нужно было перезапустить сервер ... мое приложение получало значение, установленное на уровне пользователя. Теперь имеет смысл. Благодаря! – Lemmerich 8 October 2012 в 15:06
  • 3
    Рад слышать, как вы это поняли. Если вы хотите, отредактируйте мой ответ и добавьте предупреждение о перезапуске сервера и о необходимости его перезагрузки. Этот ответ может помочь другим людям. – sergserg 8 October 2012 в 15:09
  • 4
    Я столкнулся с аналогичной проблемой, когда я добавил некоторые пользовательские переменные среды и Environment.GetEnvironmentVariable («custom_variable») не читал. Я перезапустил систему и работал над тем же самым фрагментом кода. – sabertooth1990 7 October 2013 в 06:39

Необходимость перезапуска IIS с помощью команды iisreset.

6
ответ дан haishan 17 August 2018 в 12:20
поделиться

Я столкнулся с той же проблемой, и благодаря @sergserg я придумал это, и это сработало:

var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)

Важным битом было использование EnvironmentVariableTarget.User

15
ответ дан Patrick Michalina 17 August 2018 в 12:20
поделиться
  • 1
    Это также работает и для системы var. Просто измените .User на .Machine. Я добавлял к PATH var, и он не получал заданное значение из кодовой строки, используя только Environment.GetEnvironmentVariable («PATH»), изменяясь на Environment.GetEnvironmentVariable («PATH», EnvironmentVariableTarget.Machine) извлекал новое значение. – Zunair 7 July 2017 в 15:57
  • 2
    Это сработало и для меня. Без этого мне пришлось перезапустить мою систему, хотя я добавил пользовательскую переменную. – Tamra Myers - Microsoft 1 March 2018 в 22:11

Перезапуск Visual Studio исправил его для меня (предполагая, что IIS Express также кэширует эти значения).

5
ответ дан Paul Roub 17 August 2018 в 12:20
поделиться
  • 1
    VS, по-видимому, не обнаруживает изменений в переменных среды во время работы. Знание этого спасло бы мне массу бессмысленных проблем. Этот ответ должен быть выше в списке. – Flopdong 13 July 2018 в 17:49
  • 2
    какое легкое решение это было. Я просто не замечал этого, но мальчик, это решило мою проблему. Спасибо за простое, но полезное предложение! – theITvideos 12 August 2018 в 13:30
Другие вопросы по тегам:

Похожие вопросы: