Изменить системную переменую PATH

Busenka76

Как в программе изменить системную переменную PATH так, чтобы после выхода это изменение не "потерялось"?
К примеру если в cmd написать path=c:\programs;%path% , то после выхода из командной строки путь c:\programs не будет проверяться при последующем запуске каких-либо программ.
В строке "Path" переменных среды в свойствах "My computer" написано много чего типа c:\Windows;..... - вот как этот списочек поменять из программы?

olegusmaximus

а разве ета информация не входит к контекст
процесса и у каждого она своя?

shlyumper

Под Windows 9x/ME - править autoexec.bat
Под Windows NT/2000/XP/... - HKCU\Environment - пользовательские, HKLM\System\CurrentControlSet\Session Manager\Environment - глобальные.

sergey_m

Переменные окружения наследуются от родителя к потомку, но не в обратном направлении. См. так же ответ .

Flack_bfsp

Под Windows 9x/ME - править autoexec.bat

На самом деле это верно только под Windows 9x. Потому что Windows ME не только не пользуется файлами autoexec.bat и config.sys, но даже обнуляет их при каждой перезагрузке.

anton7805

фигасе, я даже в XP прописывал path в autoexec.bat и всё работало

Flack_bfsp

Ну ведь XP - это не есть прямое продолжение ME, хотя она оттуда многое взяла.

bleyman

К счастью я с МЕ общался ровно полчаса, про нее ничего сказать не могу.
ХР и 2003, насколько я понял, автоекзек и конфиг интерпретирует, причем довольно криво. Так что лучше их не использовать.
А так вообще программы на разных языках бывают =) Неплохо было бы указать какой именно интересует. В общем случае, конечно, через регистри.
О! Предлагаю извратный вариант: рантаймно сгенерить прогу на JScript под Виндовс Скриптинг Хост
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WshSysEnv("PATH") += ";zzz";
Причем вместо ззз вписать нужный путь, после чего эту прогу запустить.
Только тут есть одна фишка: все процессы юзающие path нужно будет перезапустить. Причем это не зависит от способа прописывания. Вот.

Busenka76

на тце ++ пишу
вообще менять системную переменную смысла наверное нет, так как хз какие там права у пользователя будут (restricted user менять системную Path не может); нужно изменить "локальную" (ну может она как-то по-другому правильно называется, но смысл, я надеюсь, вы поняли) переменную Path на время выполнения программы. Вообще можно ли в теле программы, которая юзает некоторые библиотеки, прописать это изменение переменной Path, чтобы она знала откуда их подгружать, или я что-то туплю (что мне сильно кажется)?

bleyman

Эээ. Если ты изменишь переменную у себя, а затем запустишь программу из под себя, то ей передадутся твои переменные, то есть измененная пась. Мне так кажется.
Энивей, у любого нормального exec (функция такая для запуска программ) есть версия, в которой ты сам передаешь массив переменных окружения. Какой угодно.
Оставить комментарий
Имя или ник:
Комментарий: