21

Мне нужно было добавить новую запись в мою переменную PATH. Для меня это обычное занятие, но я недавно начал использовать Windows 8. Я предполагал, что процесс будет похож на Windows 7, Vista, XP ...

Вот моя последовательность событий:

  1. Откройте Свойства системы (Пуск-> [тип "Панель управления"] -> Панель управления \ Система и безопасность \ Система -> Расширенные настройки системы -> Переменные среды)
  2. Добавить новый путь в начало моей переменной USER PATH (C:\ dev \ Java \ apache-ant-1.8.4 \ bin;)
  3. Открыл командную строку (Пуск -> [введите "командная строка" введите] -> [введите "путь" введите]

Мой новый путь не доступен (см. Прикрепленное изображение и видео). Я дублировал тот же процесс на компьютере с Windows 7, и он работал.

Скриншот переменных среды

РЕДАКТИРОВАТЬ

Переменные среды Windows 8 и видео командной строки

РЕДАКТИРОВАТЬ

Это определенно не поведение Windows 7. Посмотрите это видео, чтобы увидеть поведение, которое я ожидаю работать в Windows 7. http://youtu.be/95JXY5X0fII

РЕДАКТИРОВАТЬ 31.05.2013

Итак, после большого разочарования я написал небольшое приложение на C # для тестирования события WM_SETTINGCHANGE . Этот код получает событие в Windows 7 и Windows 8. Однако в Windows 8 в моей системе я не получаю правильный путь; но я делаю в Windows 7. Это не может быть воспроизведено в других системах Windows 8.

Вот код C #.

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        SystemEvents.UserPreferenceChanging += new UserPreferenceChangingEventHandler(OnUserPreferenceChanging);

        Console.WriteLine("Waiting for system events.");
        Console.WriteLine("Press <Enter> to exit.");
        Console.ReadLine();
    }

    static void OnUserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
        Console.WriteLine("path={0}", System.Environment.GetEnvironmentVariable("PATH"));
    }
}

OnUserPreferenceChanging эквивалентно WM_SETTINGCHANGE

Программа на C #, работающая в Windows 7 (вы можете увидеть, как проходит событие, и он выбирает правильный путь).

Программа на C #, работающая в Windows 8 (вы можете видеть, как проходит событие, но неверный путь).

Есть что-то в моей среде, что ускоряет эту проблему. Однако это ошибка Windows 8?

РЕДАКТИРОВАТЬ 2014-04-28

В связи с этим и рядом других проблем мы больше не используем Windows 8 на рабочем столе. У нас нет среды для продолжения тестирования и экспериментов с этой проблемой. Для нас до сих пор нет ответа или решения этой проблемы. Ответы ниже не решили нашу проблему.

7 ответов7

7

Если вы запускаете командную строку из меню «Пуск» или ярлык на панели задач, вы должны либо:

  • Перезапустите explorer . Убей его и перезапусти.
  • Выйдите из системы и снова войдите в нее (что эффективно запускает explorer).
  • Перезапустите систему (которая также эффективно запускает explorer).

Среда не обновляется немедленно, потому что среды наследуются от их родительского процесса, за исключением explorer , который запускается системой при входе в систему. Вот как он ведет себя в моей системе Windows 7.

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

3

От: http://support.microsoft.com/kb/104011 через https://serverfault.com/q/8855/158027

...

Тем не менее, обратите внимание, что изменения переменных среды не приводят к немедленному изменению. Например, если вы запустите другую командную строку после внесения изменений, переменные среды будут отражать предыдущие (а не текущие) значения. Изменения не вступят в силу, пока вы не выйдете из системы, а затем снова войдите в систему.

Чтобы внести эти изменения без выхода из системы, передайте сообщение WM_SETTINGCHANGE всем окнам системы, чтобы любые заинтересованные приложения (такие как Windows Explorer, Диспетчер программ, Диспетчер задач, Панель управления и т.д.) Могли выполнить обновление. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ


Например, в системах на базе Windows NT следующий фрагмент кода должен распространять изменения переменных среды, используемых в командной строке:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) "Environment", SMTO_ABORTIFHUNG,
    5000, &dwReturnValue);

Ни одно из приложений, поставляемых с Windows 95 и Windows 98, включая Windows Explorer и Program Manager, не отвечает на это сообщение. Таким образом, хотя эта статья технически может быть реализована в Windows 95 и Windows 98, нет никакого эффекта, кроме как уведомлять сторонние приложения. Единственный метод изменения глобальных переменных среды в Windows 95 - это изменение файла autoexec.bat и перезагрузка.

1

Проблема в настройках пользователя. В окне 8 каждый пользователь имеет свои собственные переменные среды.

Откройте Свойства системы (Пуск-> [тип "Панель управления"] -> Панель управления \ Система и безопасность \ Система -> Расширенные настройки системы -> Переменные среды)

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

Вы должны перейти в учетную запись пользователя -> выбрать текущую учетную запись -> изменить переменные среды

После изменения перезапустите Power Shell. затем

echo $env:JAVA_HOME

или же

Get-ChildItem env

Надеюсь, что это поможет вам.

0

Опоздал к своему. Тем не мение. Вы можете стать жертвой этой проблемы: переменные пользователя не разрешены правильно в Windows.

0

Попробуйте SETX вместо SET. Например, SETX PATH "%PATH%;MyPath"

0

Если вы используете Windows 8.1, откройте командную строку от имени администратора, затем вызовите команду PATH, и вы должны увидеть ее там. Когда вы вернетесь к обычному cmd, он также появится. И на самом деле, вы должны иметь возможность запустить добавленное приложение из командной строки.

-1

Это работает, если вы используете Win+R с рабочего стола для запуска cmd.exe? Я предполагаю, что запуск его с начального экрана приводит к тому, что родительский файл запущенного cmd.exe отличается от файла explorer.exe (WSAHost.exe, IIRC или как его там), и этот родительский процесс не обновляет свою среду во время сообщений WM_SETTINGCHANGE. У меня нет машины под управлением Windows 8 для тестирования ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .