|
|
|
Junior Member
      
участник
Last Login: 11.06.2007 15:50
Сообщ.: 13,
Visits: 135
|
|
Добрый день.
У меня проблема в следующем. Необходимо написать небольшой инсталлятор, который будет помещать в некоторое место некоторый набор файлов и несколько изменять системные переменные для дальнейшего использования.
Вопрос:
1. Как получить доступ к системным переменным.
2. Как их можно изменить (например CLASSPATH) или добавить новую переменную. Причем так, чтобы эти изменения остались и поле завершения работы инсталлятора.
Заранее благодарен за помощь.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.04.2008 19:27
Сообщ.: 182,
Visits: 1 528
|
|
| Во первых глянь на статью: http://www.rgagnon.com/javadetails/java-0150.html Тама описывается как получить список системных переменных и их значения Во вторых, насколько мне известно environment variables не у каждой ОС есть, поэтому в java нет такой возможности обратиться к системным переменным! И тем более изменить их значения. Если ты делаешь инсталятор под Windows, думаю стоит воспользоваться каким нить стандартным средством для написания инсталяторов под винду. Такие по любому есть, я как то раз даже юзал какой-то, но это давно было...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.05.2007 20:20
Сообщ.: 662,
Visits: 5 795
|
|
В данный момент так повернулось, что я плотно сижу именно во всевозможных шелах виндос и юникс. За последнее время поднабрался массу опыта. Так вот послушай совета, он хороший, поверь (хочешь, проверь): не расчитывай особо на переменные окружения в виндос.
Одна из причин -- убогий шел (хотя и мега продвинутый по сравнению с досовским и 9х).
Вторая -- даже не знаю, как обобщить. Лучше пример приведу. Если ты меняешь переменные в специальном окошке (свойство компьютера), то эти изменения отражаются в реестре. Понятно, если вносишь изменения в командной строке (set), то -- нет. Так вот, напрмер, TOAD знает, куда отображаются переменные в реестре, и пытается, собака, их оттуда читать, а не из заголовка процесса.
Что я хочу сказать: с переменными в виндос -- полный алес. Потратишь (можешь потратить) уйму времени. Если для виндос, то используй готовый инсталлятор. Или напиши свой на java. Как Oracle сделал.
Ну и последнее, зуба не дам, но утверждать посмею, не сможешь из java поменять переменные окружения. А если и сможешь, то они останутся в твоем процессе и не попадут в родительский.
Правда, прямо щас пришла мысль: раз виндос хранит значения переменных в реестре, а к нему доступ из java есть, что мешает через реестр управлять переменными. Тока в этом случае получится как с TOAD'ом: твоя муля не будет принимать во внимание переменные из заголовка процесса (теперь мне понятно, почему TOAD так делает =).
Как всегда, попробуешь объяснить, и сам все поймешь =))
|
|
|
|
|
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
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.04.2008 19:27
Сообщ.: 182,
Visits: 1 528
|
|
| А не покажите кодом, как можно с виндовым реестром из явы работать? Или ссылку на пример? По идее у java не должно быть api для работы с реестром, т.к. реестр это специфическая тема для винды(под юниксом его вроде как нету)
|
|
|
|
|
Supreme 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?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.05.2007 20:20
Сообщ.: 662,
Visits: 5 795
|
|
| Еще используя JNDI можно.
|
|
|
|
|
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 вообще трогать не надо. Или ты про что-то другое спрашивал?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.05.2007 20:20
Сообщ.: 662,
Visits: 5 795
|
|
| Нет-нет, как раз про это. Все четко, спасибо.
|
|
| |