2012-02-23 5 views
4

Как установить постоянные переменные пользовательской среды из кода VB6 для приложения, которое будет запускаться под правами, отличными от администратора?Как установить постоянные переменные среды пользователя?

Я знаю SetEnvironmentValue, но, по-видимому, это только изменяет вары для текущего процесса, который недостаточен для моих нужд.

Поскольку переменные окружения, возможно, хранятся в реестре HKLM, я обеспокоен тем, что пользователь, не являющийся администратором моего приложения, не сможет установить env var.

+0

Вы не можете установить общесистемные переменные без прав администратора. если бы это было возможно, было бы тривиально, если бы вредоносное приложение отклоняло (скажем) системную переменную PATH и заставляло загружать собственные вражеские DLL вместо стандартных системных. Вы можете, самое большее, установить переменные для текущего пользователя. –

+0

@MarcB: Я говорю о переменных пользовательской среды, а не о системных. Есть ли способ их выведения за пределы текущего процесса? – CJ7

ответ

2

Для текущего пользователя переменные среды хранятся в пределах /HKEY_CURRENT_USER/Environment, что не требует повышенных привилегий.

+0

Я ржавый с VB6, но этот ответ может помочь: http://stackoverflow.com/a/492000/119549 – Jacob

+0

Когда изменение будет видимым для процессов? – CJ7

2

Гуру VB6 Карл Петерсон написал многоразовый модуль для обработки переменных пользовательской или системной среды. См. here из журнала Visual Studio в 2009 году. Direct link to code

+0

Эта ссылка, похоже, касается папок, а не env vars. – CJ7

+0

@CraigJ Упс, возможно, вклеил неправильную ссылку! Попробуй. – MarkJ

+0

Считаете ли вы, что могут возникнуть какие-либо проблемы с этим кодом, в частности с вызовом SendMessageTimeout, которым управляет пользователь, не являющийся администратором, в довольно закрытой среде? – CJ7

0

Я написал этот удобный год, чтобы сделать то, что вы просили.

http://www.vbrad.com/pf.asp?p=Source/src_environment.htm

+0

Я обнаружил, что мое приложение должно быть перезапущено для изменений в пользовательском env var, которое будет видно приложению, даже после использования функции SendMessageTimeout. Это ожидаемое поведение? – CJ7

+0

@ CraigJ На самом деле это не должно теоретически работать. Ваше приложение работает под тем же самым пользователем, что и приложение, занимающееся вещанием? Кроме того, я написал этот код более десяти лет назад. – AngryHacker

Смежные вопросы