Environment Class


The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Provides information about, and means to manipulate, the current environment and platform. This class cannot be inherited.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)


public static class Environment


Gets the command line for this process.


Gets or sets the fully qualified path of the current working directory.


Gets a unique identifier for the current managed thread.


Gets or sets the exit code of the process.


Gets a value that indicates whether the current application domain is being unloaded or the common language runtime (CLR) is shutting down.


Determines whether the current operating system is a 64-bit operating system.


Determines whether the current process is a 64-bit process.


Gets the NetBIOS name of this local computer.


Gets the newline string defined for this environment.


Gets an OperatingSystem object that contains the current platform identifier and version number.


Gets the number of processors on the current machine.


Gets current stack trace information.


Gets the fully qualified path of the system directory.


Gets the number of bytes in the operating system's memory page.


Gets the number of milliseconds elapsed since the system started.


Gets the network domain name associated with the current user.


Gets a value indicating whether the current process is running in user interactive mode.


Gets the user name of the person who is currently logged on to the Windows operating system.


Gets a Version object that describes the major, minor, build, and revision numbers of the common language runtime.


Gets the amount of physical memory mapped to the process context.


Terminates this process and returns an exit code to the operating system.


Replaces the name of each environment variable embedded in the specified string with the string equivalent of the value of the variable, then returns the resulting string.


Immediately terminates a process after writing a message to the Windows Application event log, and then includes the message in error reporting to Microsoft.

System_CAPS_pubmethodSystem_CAPS_staticFailFast(String, Exception)

Immediately terminates a process after writing a message to the Windows Application event log, and then includes the message and exception information in error reporting to Microsoft.


Returns a string array containing the command-line arguments for the current process.


Retrieves the value of an environment variable from the current process.

System_CAPS_pubmethodSystem_CAPS_staticGetEnvironmentVariable(String, EnvironmentVariableTarget)

Retrieves the value of an environment variable from the current process or from the Windows operating system registry key for the current user or local machine.


Retrieves all environment variable names and their values from the current process.


Retrieves all environment variable names and their values from the current process, or from the Windows operating system registry key for the current user or local machine.


Gets the path to the system special folder that is identified by the specified enumeration.

System_CAPS_pubmethodSystem_CAPS_staticGetFolderPath(Environment.SpecialFolder, Environment.SpecialFolderOption)

Gets the path to the system special folder that is identified by the specified enumeration, and uses a specified option for accessing special folders.


Returns an array of string containing the names of the logical drives on the current computer.

System_CAPS_pubmethodSystem_CAPS_staticSetEnvironmentVariable(String, String)

Creates, modifies, or deletes an environment variable stored in the current process.

System_CAPS_pubmethodSystem_CAPS_staticSetEnvironmentVariable(String, String, EnvironmentVariableTarget)

Creates, modifies, or deletes an environment variable stored in the current process or in the Windows operating system registry key reserved for the current user or local machine.

Use the Environment class to retrieve information such as command-line arguments, the exit code, environment variable settings, contents of the call stack, time since last system boot, and the version of the common language runtime.

The following example demonstrates displays a list of information about the current environment.

// Sample for Environment class summary
using System;
using System.Collections;

class Sample 
    public static void Main() 
    String str;
    String nl = Environment.NewLine;
    Console.WriteLine("-- Environment members --");

//  Invoke this sample with an arbitrary set of command line arguments.
    Console.WriteLine("CommandLine: {0}", Environment.CommandLine);

    String[] arguments = Environment.GetCommandLineArgs();
    Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments));

//  <-- Keep this information secure! -->
    Console.WriteLine("CurrentDirectory: {0}", Environment.CurrentDirectory);

    Console.WriteLine("ExitCode: {0}", Environment.ExitCode);

    Console.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted);

//  <-- Keep this information secure! -->
    Console.WriteLine("MachineName: {0}", Environment.MachineName);

    Console.WriteLine("NewLine: {0}  first line{0}  second line{0}  third line",

    Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());

    Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace);

//  <-- Keep this information secure! -->
    Console.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory);

    Console.WriteLine("TickCount: {0}", Environment.TickCount);

//  <-- Keep this information secure! -->
    Console.WriteLine("UserDomainName: {0}", Environment.UserDomainName);

    Console.WriteLine("UserInteractive: {0}", Environment.UserInteractive);

//  <-- Keep this information secure! -->
    Console.WriteLine("UserName: {0}", Environment.UserName);

    Console.WriteLine("Version: {0}", Environment.Version.ToString());

    Console.WriteLine("WorkingSet: {0}", Environment.WorkingSet);

//  No example for Exit(exitCode) because doing so would terminate this example.

//  <-- Keep this information secure! -->
    String query = "My system drive is %SystemDrive% and my system root is %SystemRoot%";
    str = Environment.ExpandEnvironmentVariables(query);
    Console.WriteLine("ExpandEnvironmentVariables: {0}  {1}", nl, str);

    Console.WriteLine("GetEnvironmentVariable: {0}  My temporary directory is {1}.", nl,

    Console.WriteLine("GetEnvironmentVariables: ");
    IDictionary	environmentVariables = Environment.GetEnvironmentVariables();
    foreach (DictionaryEntry de in environmentVariables)
        Console.WriteLine("  {0} = {1}", de.Key, de.Value);

    Console.WriteLine("GetFolderPath: {0}", 

    String[] drives = Environment.GetLogicalDrives();
    Console.WriteLine("GetLogicalDrives: {0}", String.Join(", ", drives));
This example produces results similar to the following:
(Any result that is lengthy or reveals information that should remain 
secure has been omitted and marked "!---OMITTED---!".)


-- Environment members --
CommandLine: env0 ARBITRARY TEXT
GetCommandLineArgs: env0, ARBITRARY, TEXT
CurrentDirectory: C:\Documents and Settings\!---OMITTED---!
ExitCode: 0
HasShutdownStarted: False
MachineName: !---OMITTED---!
  first line
  second line
  third line
OSVersion: Microsoft Windows NT 5.1.2600.0
StackTrace: '   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.get_StackTrace()
   at Sample.Main()'
SystemDirectory: C:\WINNT\System32
TickCount: 17995355
UserDomainName: !---OMITTED---!
UserInteractive: True
UserName: !---OMITTED---!
Version: !---OMITTED---!
WorkingSet: 5038080
  My system drive is C: and my system root is C:\WINNT
  My temporary directory is C:\DOCUME~1\!---OMITTED---!\LOCALS~1\Temp.
GetFolderPath: C:\WINNT\System32
GetLogicalDrives: A:\, C:\, D:\


Universal Windows Platform
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top