На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Windows
1. Указывайте версию Вашей ОС.
2. Запрещается размещать запросы и ссылки на кряки, серийники и т.п., а также вопросы нарушения лицензии ПО и его взлома.
3. Не разрешается давать советы из разряда "Поставь Linux".
4. Переустановка ОС - крайнее и безотказное лекарство, которое знают все. В таких советах никто не нуждается.
5. При публикации скриптов пользоваться тегами code. Тип подсветки кода выбирать строго в соответствии с языком публикуемого кода.
6. Прежде чем задать вопрос, обязательно загляните в FAQ и следуйте написанным рекомендациям для устранения проблемы. И если не помогло, а поиск по разделу не дал результатов - только тогда задавайте вопрос на форуме.
7. Вопросы, связанные с проблемами ПО, задавайте в разделе Программное обеспечение
Модераторы: Akina
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Глобальное изменение переменной Path , Windows XP SP3, Windows 7
    Надо в скрипте добавлять к Path свои пути. Везде рекомендуют править реестр командой типа

    REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_EXPAND_SZ /d "%PATH%";<добавляемый путь> /f

    но проблема в том, что это не работает. Командный файл выполняется, в реестре значение изменяется. Но оно не влияет на переменные среды как самого командного файла, так и последующих вызовов программ. Ну ладно, для текущей сессии, в которой выполняется командный файл, оно и не обязано измениться, там используется полученная от ОС копия, в которой изменений нет. Но если после внесения изменений выполнить отдельно командный файл со строкой set path > path.txt то path.txt содержит значение Path до изменений, а не то, которое в реестре.

    И как сделать, чтобы у следующего запускаемого cmd.exe или другого приложения среда содержала Path с изменением? Или это только перезагрузкой?
      setx обычно используют. хотя на текущий набор переменных она тоже не влияет
      Сообщение отредактировано: Dark Side -
        нужно встроенными средствами, причём винда это всё может - если запустить "Система\Дополнительно\Переменные среды" и там нажать ОК, то всё становится на свои места, и изменения Path начинают влиять на последующие командные файлы

        я так понимаю, это из-за того, что текущая копия Explorer имеет сначала не измененные переменные среды, но "Система\Дополнительно\Переменные среды" их приводит в соответствие с записью в реестре - вот и вопрос, как это сделать самостоятельно? наверняка в какой-нибудь DLL есть соответствующий вызов
          Цитата Environment Variables
          ...
          Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify system environment variables using the Control Panel. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message with lParam set to the string "Environment". This allows applications, such as the shell, to pick up your updates. Note that the values of the environment variables listed in this key are limited to 1024 characters.
          ...
            Цитата
            then broadcast a WM_SETTINGCHANGE message


            ага, вот оно... осталось найти в какой системной dll что дернуть, чтобы она это сделала, дабы самому не писать крохотную утилитку только для этого сообщения
              Это SendMessage() из User32.dll. Что за скринт? Shell?
                Цитата
                Что за скринт? Shell?


                cmd.exe

                с трудом представляю, как дёрнуть её с параметрами HWND_BROADCAST и WM_SETTINGCHANGE

                Добавлено
                что-то типа такого?

                rundll32 user32.dll,SendMessage 65535 26 0 "Environment"

                ?

                Добавлено
                нет, так не работает, среда не изменяется при повторном пуске cmd
                  Не надо хаков.
                  ExpandedWrap disabled
                    echo Set objShell  = WScript.CreateObject("WScript.Shell")              >  addPaths.vbs
                    echo Set objSysEnv = objShell.Environment("SYSTEM")                     >> addPaths.vbs
                    echo objSysEnv("PATH") = objSysEnv("PATH") + "тут твои маршруты" >> addPaths.vbs
                    echo Set objSysEnv = Nothing                                            >> addPaths.vbs
                    echo Set objShell  = Nothing                                            >> addPaths.vbs
                    cscript addPaths.vbs
                    del addPaths.vbs
                    так и что - это изменит Path в реестре и сделает броадкаст сообщения об изменении среды, чтобы и в команднике она поменялась?
                      Если objShell.Environment("SYSTEM"), то должно, проверь. Если будет objShell.Environment("USER"), то повлияет на локальные для текущего юзера переменные. Если objShell.Environment("PROCESS"), то на локальные для процесса. Думаю, этот вариант совсем не интересен.
                        проверю, но почему-то пока думаю, что изменит только в реестре и у текущего командника, а у копии Explorer останутся старые

                        проверю завтра
                          Это должно повлиять на все приложения, которые слушают броадкаст WM_SETTINGCHANGE. Те, которые не слушают, не переубедишь без их рестарта, но это не проблемы системы.
                            а кроме как vbscript-ом - просто из командной строки никак? мало ли что...
                              ExpandedWrap disabled
                                wmic environment where "name='Path' and SystemVariable=TRUE" set VariableValue='NEWPATHVALUE'

                              Правда сам wmic не везде есть - в WinXP Home, например, ЕМНИП.
                                Цитата
                                wmic environment where "name='Path' and SystemVariable=TRUE" set VariableValue='NEWPATHVALUE'


                                это очевидно заменит старый Path, а как к нему добавить?

                                Добавлено
                                ага, кажется сам разобрался...

                                в Windows 7 есть wmic? нет под руками 7-ки, чтобы проверить
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1930 ]   [ 15 queries used ]   [ Generated: 24.11.25, 00:22 GMT ]