Вы можете использовать Environment.SetEnvironmentVariable:
Environment.SetEnvironmentVariable("SomeVariable", "Some value", EnvironmentVariableTarget.User);
Последний параметр определяет объем и срок службы переменной (либо процесса, компьютера или пользователя). Если вы хотите установить переменную для машины, вам нужно будет запустить ее как admin.
Edit: я замечаю, однако, что если выполнение консольного приложения с вышеуказанным кодом, переменная окружения не доступен, пока не откроется новое окно командной строки (так что, если выполнение консольного приложения из пакетного файла, переменные не будет доступен для пакетного файла, если только не будет хитрости, чтобы он обновил набор переменных среды, которые он видит).
Редактировать 2: Хорошо, я копался в этом, и, похоже, нет очевидного способа получить пакетный файл с обновленным набором переменных окружения. Один обходной путь, который я нашел, состоит в том, чтобы иметь .net-код для написания командного файла для установки переменных вместо их установки. Вызывающий пакетный сценарий может затем запустить созданный пакетный файл, что среда создана:
.Net Console App:
static void Main(string[] args)
{
string outputFile = @"c:\temp\setvars.bat";
string variable = "set SomeVariable=Some value";
File.WriteAllText(outputFile, variable);
}
BAT-файл:
call myconsoleapp.exe
call c:\temp\setvars.bat
echo %SomeVariable%
Вы избили меня до него. Я думаю, что это неплохое решение, и в моем ответе я немного изменился. Я не думаю, что есть какой-то другой «хороший» способ сделать это. – Xiaofu
Это решение работало красиво, жаль, что это ограничение для переменных среды, но обходное решение будет сделано. – benPearce