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

ответ

20

, если вы хотите, чтобы навсегда установить переменную окружения, вы можете вставить новое значение в реестре. например, с помощью VBScript, добавьте путь «C: \ тест» в переменной 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/модули для чтения и записи реестр

+1

Просто сохраните это как .vbs и запустите. –

2

Используйте класс окружающей среды, как это:

Environment.SetEnvironmentVariable("foo", "bar"); 
+0

Я забыл упомянуть, что это просто на время программы или постоянно? – Javier

+0

Это повлияет только на текущую программную среду. Изменения в системе в реестре (см. Ответ ghostdog) и требуют перезагрузки программы после внесения изменений. – Joshua

-3

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

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

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

+1

Посмотрите на [this] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653 (v = vs.85) .aspx) для переменной окружения, установленной в методе. -1 для FUD. – ssc

8

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

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine); 
+0

Становится ли это постоянным? – Javier

+1

Это зависит от значения используемой перечисления EnvironmentVariableTarget. См. Http://msdn.microsoft.com/en-us/library/system.environmentvariabletarget.aspx – kicsit

+0

мое окно отладки зависает, когда я добавляю в «EnvironmentVariableTarget.Machine» –

5

или вы могли бы попробовать сценарий 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

+0

Это работает, как описано, но оболочка DOS, которая уже открыта когда установлен параметр env var, похоже, что оно не подбирает изменения, поэтому, по-видимому, PowerShell не передает сообщение «WM_SETTINGCHANGE», как описано [здесь] (http://msdn.microsoft.com/en-us/library/ окна/настольные/ms725497 (v = vs.85) .aspx). Хорошее начало, хотя. – ssc

4

F или кто-либо еще ищете быстрый ответ командной строки

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

Его также доступны в Windows 7 и 8 toolkit.

+1

+1 Более простой, чем предыдущий ответ и работает на win7 ultimate слишком – daitangio

+0

setx.exe не может быть худшим инструментом для расширения 'Path'. Пользовательские и системные значения «Путь» никогда не должны быть объединены, а переменные процента в значении «REG_EXPAND_SZ» должны оставаться нерасширенными. setx.exe не может этого сделать. Он может сделать ужасный беспорядок, который нельзя отменить. – eryksun

+0

не обвиняйте нас в том, что вы хотите использовать командную строку, предоставленную Microsoft: Описание: Создает или изменяет переменные среды в пользовательской или системной среде . Может устанавливать переменные на основе аргументов, regkeys или ввода файла. – user1885834