Программно изменить переменные среды? - PullRequest
18 голосов
/ 23 января 2010
  • Windows 7.
  • Это для моей машины, поэтому не имеет значения, требуются ли права администратора или что-то в этом роде.
  • Желательно в Python или .NET, но я могу немного изучить программирование на Win32 (C / C ++), если это необходимо.

Ответы [ 6 ]

21 голосов
/ 23 января 2010

если вы хотите навсегда установить переменную среды, вы можете вставить новое значение в реестр. например, с помощью vbscript добавьте путь «c: \ test» в переменную PATH

Set WshShell = WScript.CreateObject("WScript.Shell")
strReg = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path"
strSetting = WshShell.RegRead(strReg)
strNewSetting = strSetting&";c\test"
WshShell.RegWrite strReg, strNewSetting

Итак, если вы используете Python или другие языки, вы можете сделать то же самое, используя собственные api / модули вашего языка для чтения и записи реестра

8 голосов
/ 17 июня 2010

В C # следующее создает постоянную переменную среды:

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine);
6 голосов
/ 12 июля 2011

или вы можете попробовать скрипт Windows PowerShell; PowerShell установлен в Windows 7 по умолчанию.

запустить powershell.exe

PS C:\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User")

Тогда, например, из cmd.exe

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\>echo %TestVariable%
Test value.

C:\>

Или (по-новому) powershell.exe

PS C:\> echo $ENV:TestVariable
Test Value.
PS C:\>

проверить http://technet.microsoft.com/en-us/library/ff730964.aspx

4 голосов
/ 26 сентября 2013

Для всех, кто ищет быстрый ответ из командной строки

SETX доступен на серверах Windows (изначально я думаю - http://technet.microsoft.com/en-us/library/cc755104.aspx)

Также доступен в Инструментарий Windows 7 и 8 .

2 голосов
/ 23 января 2010

Используйте класс Environment следующим образом:

Environment.SetEnvironmentVariable("foo", "bar");
0 голосов
/ 23 января 2010

Программно изменяемые переменные среды действуют только на время действия программы. Не слышал о том, чтобы действительно изменить среду в масштабе всей системы и сделать ее эффективной тут же. Я не думаю, что это можно сделать, для этого потребуется возиться на привилегированном уровне и, возможно, возиться с основной системой, чтобы добиться этого.

Даже под Unix этого сделать нельзя, несмотря на некоторые взломы для его достижения. Я помню, как видел код, который действительно изменял переменные среды под MSDOS, изменяя структуру данных среды MSDOS _psp, но это была однозадачная система, 16-битная без какой-либо защиты.

Подводя итог, я не думаю, что вы можете, и было бы неразумно делать это, это могло бы восприниматься так, как будто система подвергается угрозе со стороны "трояна" или "вируса" в результате при попытке не так, чтобы как пользователь я не хотел, чтобы программа изменяла системную переменную среды без моего согласия! Конечно, программа может записывать в реестр, чтобы сделать его постоянным, но я все же хотел бы знать, какова его цель и почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...