C #을 사용하여 실행 파일의 절대 경로를 얻습니까?


78

이 의사 코드를 살펴보십시오.

string exe_path = system.get_exe_path()
print "This executable is located in " + exe_path

위의 프로그램을 빌드하고 실행 파일을에 배치 하면 현재 작업 디렉토리에 관계없이 실행될 때마다 C:/meow/인쇄됩니다 This executable is located in C:/meow/.

어떻게 이것을 사용하여 쉽게 수행 할 수 C#있습니까?



답변:


107

MSDN에는 사용하라는 기사 가 있습니다 System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase. 디렉토리가 필요한 경우 System.IO.Path.GetDirectoryName해당 결과에 사용하십시오.

또는 Application.ExecutablePath"실행 파일 이름을 포함하여 응용 프로그램을 시작한 실행 파일의 경로를 가져옵니다" 가 더 짧기 때문에 응용 프로그램이 시작된 방법에 따라 약간 덜 신뢰할 수 있음을 의미 할 수 있습니다.


29
System.Reflection.Assembly.GetExecutingAssembly ()는 호출 된 위치 인 경우에만 EXE 어셈블리를 가져옵니다. GetEntryAssembly ()는 올바른 어셈블리를 가져옵니다.
GraemeF 2009

6
이 서비스는 C : \ Windows \ System32에서 시작되므로 Windows 서비스를 만드는 경우 특히 중요하므로 해당 작업 디렉터리를 갖게됩니다. 대신 GraemeF의 방법을 사용하겠습니다.
kevindaub 2009

55
위에서 언급 한 메서드는 현재 경로를 URI (예 : "file : // c : \\ data")로 반환합니다. 효과가 있었던 것은 : System.Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location ) );
arikfr

18
실제로는 "System.IO.Path"입니다. 따라서 올바른 네임 스페이스가있는 정규화 된 이름은 다음과 같아야합니다. System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly (). Location)
Victor Chelaru 2013 년

9
noelicus : 답변과 의견에 따르면 거의 항상 올바르게 작동하는 안전하고 정확한 방법은 다음과 같습니다. System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly (). Location)
Graham Laight

55
AppDomain.CurrentDomain.BaseDirectory

9
이것이 가장 좋고 가장 간단한 대답입니다. 이 방법은 현재 디렉토리에 관계없이 linux / mono 및 Windows에서 작동합니다.
raider33

12
using System.Reflection;

string myExeDir = new FileInfo(Assembly.GetEntryAssembly().Location).Directory.ToString();

1
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)좋습니다. 로 단순화 할 수 있지만 더 빠릅니다.
mklement0


4
var dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

나는 최고 등급의 답변에 뛰어 들었고 내가 기대했던 것을 얻지 못했다는 것을 알았습니다. 나는 내가 찾고있는 것을 찾기 위해 코멘트를 읽어야했다.

그런 이유로 나는 그것이 가치있는 노출을 제공하기 위해 댓글에 나열된 답변을 게시하고 있습니다.


1
좋지만, .GetEntryAssembly()아니야 .GetExecutingAssembly().
mklement0

2

콘솔 앱에 .config 파일이 있고 이제 아래와 같이된다고 가정합니다.

Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\YourFolderName\\log4net.config";

2
CurrentDirectory는 응용 프로그램이 실행되는 디렉터리가 될 수 없습니다.

3
을 사용하십시오 Path.Combine. 이와 같이 수동으로 결합 된 경로에서 Mono에서 제대로 작동하지 않는 코드가 많이 있습니다.
Joseph Lennox 2015 년

1

내 편으로는 양식 신청서와 함께 사용했습니다.

String Directory = System.Windows.Forms.Application.StartupPath;

응용 프로그램 시작 경로를 사용합니다.


0

나를 위해 일했지만 위에 있지 않은 것은 Process.GetCurrentProcess().MainModule.FileName.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.