Environment.SetEnvironmentVariable Metoda

Definice

Vytvoří, upraví nebo odstraní proměnnou prostředí.

Přetížení

SetEnvironmentVariable(String, String)

Vytvoří, upraví nebo odstraní proměnnou prostředí uloženou v aktuálním procesu.

SetEnvironmentVariable(String, String, EnvironmentVariableTarget)

Vytvoří, upraví nebo odstraní proměnnou prostředí uloženou v aktuálním procesu nebo v klíči registru operačního systému Windows vyhrazený pro aktuálního uživatele nebo místního počítače.

SetEnvironmentVariable(String, String)

Zdroj:
Environment.cs
Zdroj:
Environment.cs
Zdroj:
Environment.cs

Vytvoří, upraví nebo odstraní proměnnou prostředí uloženou v aktuálním procesu.

public static void SetEnvironmentVariable (string variable, string value);
public static void SetEnvironmentVariable (string variable, string? value);

Parametry

variable
String

Název proměnné prostředí.

value
String

Hodnota, která se má přiřadit k variable.

Výjimky

variable je null.

variable obsahuje řetězec nulové délky, počáteční šestnáctkový znak nuly (0x00) nebo rovnítko ("=").

-nebo-

Délka variable nebo value je větší nebo rovna 32 767 znakům.

-nebo-

Během provádění této operace došlo k chybě.

Volající nemá požadovaná oprávnění k provedení této operace.

Příklady

Následující příklad se pokusí načíst hodnotu proměnné prostředí s názvem Test1 z bloku prostředí procesu. Pokud proměnná neexistuje, příklad vytvoří proměnnou a načte její hodnotu. Příklad zobrazí hodnotu proměnné. Pro implementace .NET spuštěné v systémech Windows také volá metodu GetEnvironmentVariables(EnvironmentVariableTarget) s každým členem EnvironmentVariableTarget výčtu, aby bylo možné zjistit, že proměnnou lze načíst pouze z bloku prostředí aktuálního procesu. (Implementace .NET v systémech unixových jako podporují pouze proměnné v bloku procesního prostředí.) A nakonec, pokud příklad vytvořil proměnnou, odstraní ji.

using System;

public class Example
{
   public static void Main()
   {
      string value;
      bool toDelete = false;

      // Check whether the environment variable exists.
      value = Environment.GetEnvironmentVariable("Test1");
      // If necessary, create it.
      if (value == null)
      {
         Environment.SetEnvironmentVariable("Test1", "Value1");
         toDelete = true;

         // Now retrieve it.
         value = Environment.GetEnvironmentVariable("Test1");
      }
      // Display the value.
      Console.WriteLine($"Test1: {value}\n");

      // Confirm that the value can only be retrieved from the process
      // environment block if running on a Windows system.
      if (Environment.OSVersion.Platform == PlatformID.Win32NT)
      {
         Console.WriteLine("Attempting to retrieve Test1 from:");
         foreach (EnvironmentVariableTarget enumValue in
                           Enum.GetValues(typeof(EnvironmentVariableTarget))) {
            value = Environment.GetEnvironmentVariable("Test1", enumValue);
            Console.WriteLine($"   {enumValue}: {(value != null ? "found" : "not found")}");
         }
         Console.WriteLine();
      }

      // If we've created it, now delete it.
      if (toDelete) {
         Environment.SetEnvironmentVariable("Test1", null);
         // Confirm the deletion.
         if (Environment.GetEnvironmentVariable("Test1") == null)
            Console.WriteLine("Test1 has been deleted.");
      }
   }
}
// The example displays the following output if run on a Windows system:
//      Test1: Value1
//
//      Attempting to retrieve Test1 from:
//         Process: found
//         User: not found
//         Machine: not found
//
//      Test1 has been deleted.
//
// The example displays the following output if run on a Unix-based system:
//      Test1: Value1
//
//      Test1 has been deleted.

Poznámky

Volání této metody je ekvivalentní volání SetEnvironmentVariable(String, String, EnvironmentVariableTarget) přetížení s hodnotou EnvironmentVariableTarget.Process pro target argumentu.

V systémech unixových systémů nemají volání metody SetEnvironmentVariable(String, String) žádný vliv na žádné nativní knihovny, které jsou nebo budou načteny. (Naopak úpravy prostředí v procesu provedené nativními knihovnami nejsou spravované volající vidět.)

Pokud argument value není null a proměnná prostředí pojmenovaná parametrem variable neexistuje, vytvoří se proměnná prostředí a přiřadí se obsah value. Pokud existuje, změní se jeho hodnota. Vzhledem k tomu, že proměnná prostředí je definována pouze v bloku prostředí aktuálního procesu, nezachovává se ani po ukončení procesu.

Pokud variable obsahuje neiniční šestnáctkový znak nuly, budou se znaky před nulovým znakem považovat za název proměnné prostředí a všechny další znaky budou ignorovány.

Pokud value obsahuje neiniční šestnáctkový znak nuly, budou znaky před znakem nuly přiřazeny proměnné prostředí a všechny následující znaky budou ignorovány.

Pokud je valuenull (nebo je ve verzích starších než .NET 9) a proměnná prostředí pojmenovaná variable existuje, proměnná prostředí se odstraní. Pokud variable neexistuje, nedojde k žádné chybě, i když operaci nelze provést. value se považuje za prázdné za některé z následujících podmínek:

  • Je to String.Empty.
  • Skládá se z jednoho znaku, jehož hodnota je U+0000.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

SetEnvironmentVariable(String, String, EnvironmentVariableTarget)

Zdroj:
Environment.cs
Zdroj:
Environment.cs
Zdroj:
Environment.cs

Vytvoří, upraví nebo odstraní proměnnou prostředí uloženou v aktuálním procesu nebo v klíči registru operačního systému Windows vyhrazený pro aktuálního uživatele nebo místního počítače.

public static void SetEnvironmentVariable (string variable, string? value, EnvironmentVariableTarget target);
public static void SetEnvironmentVariable (string variable, string value, EnvironmentVariableTarget target);

Parametry

variable
String

Název proměnné prostředí.

value
String

Hodnota, která se má přiřadit k variable.

target
EnvironmentVariableTarget

Jedna z hodnot výčtu, která určuje umístění proměnné prostředí.

Výjimky

variable je null.

variable obsahuje řetězec nulové délky, počáteční šestnáctkový znak nuly (0x00) nebo rovnítko ("=").

-nebo-

Délka variable je větší nebo rovna 32 767 znakům.

-nebo-

target není členem výčtu EnvironmentVariableTarget.

-nebo-

target je Machine nebo Usera délka variable je větší nebo rovna 255.

-nebo-

target je Process a délka value je větší nebo rovna 32 767 znakům.

-nebo-

Během provádění této operace došlo k chybě.

Volající nemá požadovaná oprávnění k provedení této operace.

Příklady

Následující příklad vytvoří proměnné prostředí pro EnvironmentVariableTarget.Process, EnvironmentVariableTarget.Usera Machine cíle, zkontroluje, zda registr operačního systému obsahuje proměnné prostředí uživatele a počítače, a pak odstraní proměnné prostředí. Vzhledem k tomu, že rozhraní .NET v systémech Unix nepodporuje proměnné prostředí pro jednotlivé uživatele a počítače, pouze SetEnvironmentVariable(String, String) a SetEnvironmentVariable(String, String, EnvironmentVariableTarget) s hodnotou EnvironmentVariableTarget.Process úspěšně uložit proměnnou prostředí do bloku procesního prostředí.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
    public static void Main()
    {
        // Environment variable names for default, process, user, and machine targets.
        string defaultEnvVar = nameof(defaultEnvVar);
        string processEnvVar = nameof(processEnvVar);
        string userEnvVar = nameof(userEnvVar);
        string machineEnvVar = nameof(machineEnvVar);

        string dft = nameof(dft);
        string process = nameof(process);
        string user = nameof(user);
        string machine = nameof(machine);

        // Set the environment variable for each target.
        Console.WriteLine("Setting environment variables for each target...\n");
        // The default target (the current process).
        Environment.SetEnvironmentVariable(defaultEnvVar, dft);
        // The current process.
        Environment.SetEnvironmentVariable(processEnvVar, process,
                                           EnvironmentVariableTarget.Process);
        // The current user.
        Environment.SetEnvironmentVariable(userEnvVar, user,
                                           EnvironmentVariableTarget.User);
        // The local machine.
        Environment.SetEnvironmentVariable(machineEnvVar, machine,
                                           EnvironmentVariableTarget.Machine);

        // Define an array of environment variables.
        string[] envVars = { defaultEnvVar,processEnvVar, userEnvVar, machineEnvVar };

        // Try to get the environment variables from each target.
        // The default (no specified target).
        Console.WriteLine("Retrieving environment variables from the default target:");
        foreach (var envVar in envVars)
        {
          var value = Environment.GetEnvironmentVariable(envVar) ?? "(none)";
          Console.WriteLine($"   {envVar}: {value}");
        }
        // The process block.
        Console.WriteLine("\nRetrieving environment variables from the Process target:");
        foreach (var envVar in envVars)
        {
          var value = Environment.GetEnvironmentVariable(envVar, EnvironmentVariableTarget.Process) ?? "(none)";
          Console.WriteLine($"   {envVar}: {value}");
        }
        // The user block.
        Console.WriteLine("\nRetrieving environment variables from the User target:");
        foreach (var envVar in envVars)
        {
          var value = Environment.GetEnvironmentVariable(envVar, EnvironmentVariableTarget.User) ?? "(none)";
          Console.WriteLine($"   {envVar}: {value}");
        }
        // The machine block.
        Console.WriteLine("\nRetrieving environment variables from the Machine target:");
        foreach (var envVar in envVars)
        {
          var value = Environment.GetEnvironmentVariable(envVar, EnvironmentVariableTarget.Machine) ?? "(none)";
          Console.WriteLine($"   {envVar}: {value}");
        }

        // Delete the environment variable for each target.
        Console.WriteLine("\nDeleting environment variables for each target...\n");
        // The default target (the current process).
        Environment.SetEnvironmentVariable(defaultEnvVar, null);
        // The current process.
        Environment.SetEnvironmentVariable(processEnvVar, null,
                                           EnvironmentVariableTarget.Process);
        // The current user.
        Environment.SetEnvironmentVariable(userEnvVar, null,
                                           EnvironmentVariableTarget.User);
        // The local machine.
        Environment.SetEnvironmentVariable(machineEnvVar, null,
                                           EnvironmentVariableTarget.Machine);
    }
}
// The example displays the following output if run on a Windows system:
//      Setting environment variables for each target...
//
//      Retrieving environment variables from the default target:
//        defaultEnvVar: dft
//        processEnvVar: process
//        userEnvVar: user
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the Process target:
//        defaultEnvVar: dft
//        processEnvVar: process
//        userEnvVar: user
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the User target:
//        defaultEnvVar: (none)
//        processEnvVar: (none)
//        userEnvVar: user
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the Machine target:
//        defaultEnvVar: (none)
//        processEnvVar: (none)
//        userEnvVar: (none)
//        machineEnvVar: machine
//
//      Deleting environment variables for each target...
//
// The example displays the following output if run on a Unix-based system:
//
//      Setting environment variables for each target...
//
//      Retrieving environment variables from the default target:
//        defaultEnvVar: dft
//        processEnvVar: process
//        userEnvVar: (none)
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the Process target:
//        defaultEnvVar: dft
//        processEnvVar: process
//        userEnvVar: (none)
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the User target:
//        defaultEnvVar: (none)
//        processEnvVar: (none)
//        userEnvVar: (none)
//        machineEnvVar: (none)
//
//      Retrieving environment variables from the Machine target:
//        defaultEnvVar: (none)
//        processEnvVar: (none)
//        userEnvVar: (none)
//        machineEnvVar: (none)
//
//      Deleting environment variables for each target...

Poznámky

Metoda SetEnvironmentVariable(String, String, EnvironmentVariableTarget) umožňuje definovat proměnnou prostředí, která je k dispozici pro aktuální proces (hodnota Process). Proměnné prostředí, které jsou jedinečné pro blok prostředí aktuálního procesu, se zachovají pouze do konce procesu.

Kromě toho v systémech Windows umožňuje metoda SetEnvironmentVariable(String, String, EnvironmentVariableTarget) definovat proměnnou prostředí, která je k dispozici pro všechny procesy spuštěné na počítači (hodnota EnvironmentVariableTarget.Machine) a pro všechny procesy spuštěné uživatelem (hodnota EnvironmentVariableTarget.User). Proměnné prostředí pro jednotlivé počítače a uživatele se zkopírují do bloku prostředí aktuálního procesu.

V systémech unixových systémů se volání metody SetEnvironmentVariable(String, String, EnvironmentVariableTarget) s hodnotou EnvironmentVariableTarget.Machine nebo EnvironmentVariableTarget.User ignorují.

V systémech unixových systémů volání metody SetEnvironmentVariable(String, String, EnvironmentVariableTarget) s hodnotou EnvironmentVariableTarget.Process nemají žádný vliv na žádné nativní knihovny, které jsou nebo budou načteny. (Naopak úpravy prostředí v procesu provedené nativními knihovnami nejsou spravované volající vidět.)

Pokud argument value není null a proměnná prostředí pojmenovaná argumentem variable neexistuje, vytvoří se proměnná prostředí a přiřadí obsah value. Pokud existuje, změní se jeho hodnota.

Pokud variable obsahuje neiniční šestnáctkový znak nuly, budou se znaky před nulovým znakem považovat za název proměnné prostředí a všechny další znaky budou ignorovány.

Pokud value obsahuje neiniční šestnáctkový znak nuly, budou znaky před znakem nuly přiřazeny proměnné prostředí a všechny následující znaky budou ignorovány.

Pokud je valuenull (nebo je ve verzích starších než .NET 9) a proměnná prostředí pojmenovaná variable existuje, proměnná prostředí se odstraní. value se považuje za prázdné za některé z následujících podmínek:

  • Je to String.Empty.
  • Skládá se z jednoho znaku, jehož hodnota je U+0000.

Pokud variable neexistuje, nedojde k žádné chybě, i když operaci nejde provést. Při targetMachinebuďte opatrní, protože můžete omylem odstranit proměnnou prostředí, která ovlivňuje celý místní počítač, nejen aktuální proces nebo uživatele.

EnvironmentVariableTarget.Machine a EnvironmentVariableTarget.User v systémech Windows

Pokud je targetEnvironmentVariableTarget.User, proměnná prostředí se uloží do klíče HKEY_CURRENT_USER\Environment registru místního počítače. Zkopíruje se také do instancí Průzkumníka souborů, které jsou spuštěné jako aktuální uživatel. Proměnná prostředí se pak zdědí všemi novými procesy, které uživatel spustí z Průzkumníka souborů.

Podobně pokud je targetEnvironmentVariableTarget.Machine, proměnná prostředí je uložena v HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment klíč registru místního počítače. Zkopíruje se také do všech instancí Průzkumníka souborů. Proměnná prostředí se pak zdědí všemi novými procesy, které se spustí z Průzkumníka souborů.

Pokud je targetUser nebo Machine, ostatní aplikace jsou upozorněny na operaci nastavení zprávou systému Windows WM_SETTINGCHANGE.

Pokud je targetEnvironmentVariableTarget.User nebo EnvironmentVariableTarget.Machine, doporučujeme, aby délka value byla menší než 2048 znaků.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1