프로세스 개체는 .NET의 System.Diagnostics.Process 클래스로 표시됩니다. 현재 실행 중인 exe의 파일 이름은 Process.GetCurrentProcess().MainModule.FileName을 호출하여 얻을 수 있습니다. 하지만 이 메서드는 파일 이름만 가져옵니다. 프로그램 실행 중에 작업 디렉터리가 전환되지 않으면 System.IO.Path 메서드를 호출하여 절대 경로를 가져올 수 있습니다. 그러나 현재 디렉터리는 Environment.CurrentDirectory를 통해서도 얻을 수 있으며 많은 소프트웨어는 Open Dialog를 사용하여 파일을 열 때 작업 디렉터리를 전환하므로 이 메커니즘이 효과적이지 않습니다.
Windows Forms 애플리케이션에 있는 경우 현재 애플리케이션은 System.Windows.Forms.Application 개체로도 표시됩니다. 정적 속성인 Application.ExecutablePath 및 Application.StartupPath를 통해 실행 파일의 경로와 시작 경로를 얻을 수 있습니다. .
그러나 Windows 애플리케이션이나 라이브러리에 없는 경우 Application 개체의 속성을 여전히 얻을 수 있더라도 프로젝트에서 Assembly System.Windows.Forms에 대한 참조를 추가해야 하므로 매우 불편합니다. . 이때 Assembly의 정적 메서드인 GetCallingAssembly 또는 GetExecutingAssembly를 통해 현재 실행 중인 Assembly를 얻을 수 있으며, 이후 Assembly 클래스의 Location을 통해 어셈블리의 위치를 얻을 수 있습니다.
그러나 Assembly를 사용하는 경우 동시에 Assembly.GetCallingAssembly 또는 Assembly.GetExecutingAssembly가 .exe 파일의 위치를 가져오지 못할 수 있습니다. GAC에 강력한 이름이 추가된 어셈블리는 실행 시 .exe와 동일한 디렉터리에 있을 필요가 없습니다.
.NET 프로세스가 시작되면 AppDomain이 생성되고 모든 어셈블리가 특정 AppDomain에 로드됩니다. AppDomain이 시작될 때 일부 정보를 얻을 수 있는 AppDomain에 SetupInformation 속성이 제공됩니다. .CurrentDomain.SetupInformation. .ApplicationBase는 현재 애플리케이션이 있는 경로를 가져옵니다.
위의 방법을 통해 필요한 디렉터리를 얻은 후 System.IO.Path 메서드를 호출하여 파일명, 디렉터리명, 절대경로 등을 얻을 수 있습니다. 경로 문자열 구문 분석을 중지하고 대신 System.IO.Path 클래스를 사용하십시오.
.NET에서 애플리케이션을 개발할 때 Process/Application->AppDomain->Assembly 간의 관계를 이해하는 것은 올바른 논리를 구현하는 데 매우 도움이 됩니다.