본문 바로가기
C#

[C#] Environment

by DANEW 2023. 8. 28.

Environment 클래스

 

Environment 클래스 (System)

현재 환경 및 플랫폼에 대한 정보 및 조작 방법을 제공합니다. 이 클래스는 상속될 수 없습니다.

learn.microsoft.com

- 유용한 여러 속성을 제공

 

- 파일과 폴더

 * CurrentDirectory: 프로그램이 실행중인 디렉토리 주소의 풀 패스

 * SystemDirectory: 시스템 디렉토리

 * CommandLine: 프로그램 이름을 포함한 해당 프로세스의 명령줄

 

- 컴퓨터와 운영체제

 * MachineName: 컴퓨터의 NetBIOS명

 * ProcessorCount: CPU의 Core 수

 * OSVersion: 현재 사용중인 시스템의 System.OperatingSystem 객체를 반환

 * NewLine: 현재 사용중인 시스템의 개행 문자

 

- 사용자 로그인

 * UserName: 윈도우즈 시스템에서 로그인한 사용자의 계정명

 * UserInteractive: 프로세스가 유저에게 보여지는지(UI가 표시되어서) 여부

 * UserDomainName: 네트워크 도메인명

 

- 진단

 * TickCount

  : 시스템이 시작하고나서부터 지난 시간(ms 단위)

  : 처음 체크했을 때 엄청 큰 숫자가 떠있었는데, 재부팅 했더니 정상적으로 표시된다. 

 * StackTrace: 메소드 콜 리스트를 역순으로 표시

 * WorkingSet: 프로세스 컨텍스트에 매핑된 물리적 메모리를 표시(byte)

 * Version: 현재 사용중인 CLR의 정보가 담긴 System.Version 객체를 반환

 

- 그 밖에

 * GetFolderPath

  : 특정 시스템 폴더의 경로(Environment.SpecialFolder)를 표시

  : 2번째 인수로 Environment.SpecialFolderOption 옵션 지정이 가능한데 DoNotVerify가 정확히 어떤 방식인지...

 * GetEnvironmentVariable: 해당 환경변수의 값을 출력

 * GetEnvironmentVariables: 모든 환경변수의 Key와 Value를 IDictionary 형식으로 반환

 * SetEnvironmentVariable

  : 환경 변수를 설정(프로세스가 동작하는 동안, 프로세스에서만 적용)

  : 2번째 인수를 값이 아닌 null로 주면 해당 환경 변수를 삭제함

반응형

 * ExitCode

  : 프로그램을 명령줄이나 배치 파일로 실행했을 때, OS에 반환할 종료 코드를 설정 할 수 있음

  : 윈도우즈에서의 에러 코드 일람 - https://msdn.microsoft.com/library/ms681381(v=vs.85)

 * FailFast: 프로그램을 즉시 종료, 객체 해제등의 마무리 작업이 실행되지 않음
using System;
using System.Collections;
 
namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"CurrentDirectory: {Environment.CurrentDirectory}");
            Console.WriteLine($"SystemDirectory: {Environment.SystemDirectory}");
            Console.WriteLine($"CommandLine: {Environment.CommandLine}");
            Console.WriteLine();
 
            Console.WriteLine($"MachineName: {Environment.MachineName}");
            Console.WriteLine($"ProcessorCount: {Environment.ProcessorCount}");
            Console.WriteLine($"OSVersion: {Environment.OSVersion}");
            Console.WriteLine($"NewLine: {Environment.NewLine}");
            Console.WriteLine();
 
            Console.WriteLine($"UserName: {Environment.UserName}");
            Console.WriteLine($"UserInteractive: {Environment.UserInteractive}");
            Console.WriteLine($"UserDomainName: {Environment.UserDomainName}");
            Console.WriteLine();
 
            Console.WriteLine($"TickCount: {Environment.TickCount}");
            Console.WriteLine($"- TimeElapsed: {TimeSpan.FromMilliseconds(Environment.TickCount)}");
            Console.WriteLine($"StackTrace: \n{Environment.StackTrace}");
            Console.WriteLine($"WorkingSet: {Environment.WorkingSet}");
            Console.WriteLine($"Version: {Environment.Version}");
            Console.WriteLine();
 
            Console.WriteLine("  [ GetFolderPath ]");
            Console.WriteLine($"ProgramFilesX86: {Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolderOption.DoNotVerify)}");
            Console.WriteLine($"ProgramFiles: {Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}");
            Console.WriteLine($"Windows: {Environment.GetFolderPath(Environment.SpecialFolder.Windows)}");
            Console.WriteLine();
 
            // GetEnvironmentVariable
            Console.WriteLine("  [ GetEnvironmentVariable ]");
            Console.WriteLine($"PATHEXT: {Environment.GetEnvironmentVariable("PATHEXT")}");
            Console.WriteLine();
 
            // GetEnvironmentVariables, 너무 길어서 5라인만 표시
            Console.WriteLine("  [ GetEnvironmentVariables ]");
            IDictionary set = Environment.GetEnvironmentVariables();
            IDictionaryEnumerator sete = set.GetEnumerator();
            int lines = 5;
            int count = 0;
            for (count = 0; count < lines; count++)
            {
                if(sete.MoveNext())
                {                    
                    Console.WriteLine($"{sete.Key} = {sete.Value}");
                }            
                else
                {
                    break;
                }
            }
            if(!(count == set.Count))
            {
                Console.WriteLine($"<-- {set.Count - count} line(s) remain. -->");
            }
            Console.WriteLine();
 
            // 환경 변수 설정하기
            Environment.SetEnvironmentVariable("HEROES_OF_THE_STORM", "true");
            Console.WriteLine($"HEROES_OF_THE_STORM: {Environment.GetEnvironmentVariable("HEROES_OF_THE_STORM")}");
            Console.WriteLine();
 
            // 환경 변수 삭제하기
            Environment.SetEnvironmentVariable("HEROES_OF_THE_STORM", null);
 
            // ExitCode
            Environment.ExitCode = 0;  
 
            Console.WriteLine("< Press any key to Quit >");
            Console.ReadKey(true);
        }
    }
}
 

 

 

 

반응형

'C#' 카테고리의 다른 글

[C#] IList<T>, IList  (0) 2023.09.08
[C#] ICollection<T>, ICollection  (1) 2023.08.31
[C#] AppContext  (1) 2023.08.30
[C#] Process  (1) 2023.08.29
[C#] Console  (1) 2023.08.27
[C#] 순서 비교 (IComparable<T>, IComparable)  (1) 2023.08.26
[C#] 상등 비교 (IEquatable<T>)  (0) 2023.08.25
[C#] Guid  (0) 2023.08.24