Как сделать постоянную системную переменную с помощью BATCH или VBS? - PullRequest
1 голос
/ 03 января 2012

Я делаю установщик, который будет на 100% зависеть от системной переменной, такой как% TEMP% или% Path%, пользователи сначала дважды щелкают windows.bat файл.

Но, как я могу установить постоянную системную переменную в Windows XP, Vista, 7, 8, используя VBS или BATCH?

Я пробовал с BATCH, но в Windows XP большинство пользователей не имеют setx по умолчанию, поэтому я хочу избегать использования этой техники. Есть ли лучший способ сделать это?

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl
udeHereQuestionMark"

The operation completed successfully

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl
udeHereQuestionMark"
Value MyApplicationWillUsetThis exists, overwrite(Y/N)? Y

The operation completed successfully

Ответы [ 2 ]

4 голосов
/ 03 января 2012

Вы можете создать значение REG_SZ в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment в реестре. Имя значения указывает имя переменной среды, значение указывает значение переменной среды.

Вы также можете изменить существующие значения.

Для изменения реестра вы можете использовать метод RegRead и RegWrite объекта WScript.Shell. Для примера взгляните на Управление системным реестром .

Редактировать: Сначала вы можете удалить существующее значение, а затем восстановить его.

REG DELETE "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncludeHereQuestionMark"
3 голосов
/ 16 мая 2012

Как установить переменные окружения из VBScript

Set WshShell = CreateObject("Wscript.Shell")

' set a permanent environment variable %MyVarName% for all users
WshShell.Environment.item("MyVarName") = "MyVarValue"

Если вышеуказанный параметр не является постоянным, попробуйте этот. Это установит постоянную переменную среды для всех пользователей. Вы можете попробовать категории System, User, Volatile и Process с коллекцией Environment.

With WSHShell.Environment("SYSTEM")
    .item("MyVarName") = "MyVarValue"
End With

Вы также можете использовать ExpandEnvironmentStrings для чтения переменных среды или замены их значениями в длинных строках типа командной строки.

sValue = WshShell.ExpandEnvironmentStrings("%MyVarName%")

Для работы с реестром попробуйте

sRegKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\MyVarName"

sValue = WshShell.RegRead(sRegKey)

' don't write if no change is required.
If sValue <> sNewValue Then WshShell.RegWrite sRegKey , sNewValue
...