Доступ к системным переменным
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Доступ к системным переменным Expand / Collapse
Автор
Сообщение
05.12.2006 11:10
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 11.06.2007 15:50
Сообщ.: 13, Visits: 135
Добрый день.
У меня проблема в следующем. Необходимо написать небольшой инсталлятор, который будет помещать в некоторое место некоторый набор файлов и несколько изменять системные переменные для дальнейшего использования.

Вопрос:
1. Как получить доступ к системным переменным.
2. Как их можно изменить (например CLASSPATH) или добавить новую переменную. Причем так, чтобы эти изменения остались и поле завершения работы инсталлятора.

Заранее благодарен за помощь.
Сообщ. #908470
05.12.2006 12:39
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.04.2008 19:27
Сообщ.: 182, Visits: 1 528
Во первых глянь на статью:

http://www.rgagnon.com/javadetails/java-0150.html

Тама описывается как получить список системных переменных и их значения

Во вторых, насколько мне известно environment variables не у каждой ОС есть, поэтому в java нет такой возможности обратиться к системным переменным! И тем более изменить их значения.

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

Сообщ. #908480
06.12.2006 14:48
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
В данный момент так повернулось, что я плотно сижу именно во всевозможных шелах виндос и юникс. За последнее время поднабрался массу опыта. Так вот послушай совета, он хороший, поверь (хочешь, проверь): не расчитывай особо на переменные окружения в виндос.

Одна из причин -- убогий шел (хотя и мега продвинутый по сравнению с досовским и 9х).

Вторая -- даже не знаю, как обобщить. Лучше пример приведу. Если ты меняешь переменные в специальном окошке (свойство компьютера), то эти изменения отражаются в реестре. Понятно, если вносишь изменения в командной строке (set), то -- нет. Так вот, напрмер, TOAD знает, куда отображаются переменные в реестре, и пытается, собака, их оттуда читать, а не из заголовка процесса.

Что я хочу сказать: с переменными в виндос -- полный алес. Потратишь (можешь потратить) уйму времени. Если для виндос, то используй готовый инсталлятор. Или напиши свой на java. Как Oracle сделал.

Ну и последнее, зуба не дам, но утверждать посмею, не сможешь из java поменять переменные окружения. А если и сможешь, то они останутся в твоем процессе и не попадут в родительский.

Правда, прямо щас пришла мысль: раз виндос хранит значения переменных в реестре, а к нему доступ из java есть, что мешает через реестр управлять переменными. Тока в этом случае получится как с TOAD'ом: твоя муля не будет принимать во внимание переменные из заголовка процесса (теперь мне понятно, почему TOAD так делает =).

Как всегда, попробуешь объяснить, и сам все поймешь =))
Сообщ. #908554
06.12.2006 16:34
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Дополню совет Danissimo. Меняй или записывай переменную через реестр. Они хранятся в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. После окончания установки надо разослать широковещательное (broadcast) сообщение WM_SETTINGCHANGE, чтобы другие процессы подхватили эти изменения. Подробности в MSDN.

http://msdn2.microsoft.com/en-us/library/ms682653.aspx

Сообщ. #908567
06.12.2006 18:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.04.2008 19:27
Сообщ.: 182, Visits: 1 528
А не покажите кодом, как можно с виндовым реестром из явы работать?

Или ссылку на пример?

По идее у java не должно быть api для работы с реестром, т.к. реестр это специфическая тема для винды(под юниксом его вроде как нету)

Сообщ. #908572
07.12.2006 12:56
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Alexadr: http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/Preferences.html

bazile: А что делать с CURRENT_USER/CURRENT_CONFIG?
Сообщ. #908602
07.12.2006 13:21
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Еще используя JNDI можно.
Сообщ. #908607
07.12.2006 13:29
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Danissimo (07.12.2006)
А что делать с CURRENT_USER/CURRENT_CONFIG?

В CURRENT_USER можно писать вместо LOCAL_MACHINE если нужно чтобы эти переменные окружения были видны только текущему пользователю. CURRENT_CONFIG вообще трогать не надо.

Или ты про что-то другое спрашивал?

Сообщ. #908609
07.12.2006 14:41
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Нет-нет, как раз про это. Все четко, спасибо.