현재 실행 가능한 파일 이름을 어떻게 찾습니까? [복제]
중복 가능성 :
C #에서 현재 실행 파일의 이름을 어떻게 얻습니까?
실행 파일은 외부 라이브러리를로드합니다.
라이브러리가 호출 실행 파일을 알 수있는 방법이 있습니까?
(나는 이것에 대한 답을 다른 곳에서 보았지만 더 이상 찾을 수 없다고 맹세했을 것입니다.)
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
실행 파일을 원하는 경우 :
System.Reflection.Assembly.GetEntryAssembly().Location
라이브러리를 사용하는 어셈블리를 원하는 경우 (코드가 실행 파일 내의 클래스에서 직접 호출되는 경우 위와 동일한 어셈블리 일 수 있음) :
System.Reflection.Assembly.GetCallingAssembly().Location
경로가 아닌 파일 이름 만 원하는 경우 다음을 사용하십시오.
Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().Location)
위의 답변 외에도.
콘솔 응용 프로그램으로 test.exe를 작성했습니다.
static void Main(string[] args) {
Console.WriteLine(
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
Console.WriteLine(
System.Reflection.Assembly.GetEntryAssembly().Location);
Console.WriteLine(
System.Reflection.Assembly.GetExecutingAssembly().Location);
Console.WriteLine(
System.Reflection.Assembly.GetCallingAssembly().Location);
}
그런 다음 프로젝트를 컴파일하고 출력 이름을 test2.exe 파일로 변경했습니다. 출력 라인은 정확하고 동일합니다.
그러나 Visual Studio에서 시작하면 결과는 다음과 같습니다.
d : \ test2.vhost.exe
d : \ test2.exe
d : \ test2.exe
C : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.dll
Visual Studio에 대한 ReSharper 플러그인은
System.Diagnostics.Process.GetCurrentProcess().MainModule
가능한 System.NullReferenceException. MainModule의 문서를 살펴보면이 속성이 NotSupportedException, PlatformNotSupportedException 및 InvalidOperationException도 throw 할 수 있음을 알 수 있습니다.
GetEntryAssembly 메서드도 100 % "안전"하지 않습니다. MSDN :
관리되지 않는 응용 프로그램에서 관리되는 어셈블리가로드 된 경우 GetEntryAssembly 메서드는 null을 반환 할 수 있습니다. 예를 들어 관리되지 않는 응용 프로그램이 C #으로 작성된 COM 구성 요소의 인스턴스를 만드는 경우 프로세스의 진입 점이 관리되는 어셈블리가 아니라 관리되지 않는 코드이기 때문에 C # 구성 요소에서 GetEntryAssembly 메서드를 호출하면 null이 반환됩니다.
내 솔루션의 경우 Assembly.GetEntryAssembly().Location
.
가상화 문제를 해결해야하는 경우 더 많은 관심이 있습니다. 예를 들어 Xenocode Postbuild를 사용하여 .net 코드를 하나의 실행 파일로 연결하는 프로젝트가 있습니다. 이 실행 파일의 이름을 바꿔야합니다. 따라서 위의 모든 방법은 원래 어셈블리 또는 내부 프로세스에 대한 정보 만 가져 오기 때문에 작동하지 않았습니다.
내가 찾은 유일한 해결책은
var location = System.Reflection.Assembly.GetEntryAssembly().Location;
var directory = System.IO.Path.GetDirectoryName(location);
var file = System.IO.Path.Combine(directory,
System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe");
Environment.GetCommandLineArgs () [0]
나는 이것이 당신이 원하는 것이라고 생각합니다.
System.Reflection.Assembly.GetEntryAssembly().Location
이렇게하면 프로세스가 시작될 때 처음로드 된 어셈블리가 반환됩니다.
GetCallingAssembly
호출 스택에서 바로 위에있는 메서드를 포함하는 어셈블리를 반환하기 때문에 일반적인 경우에 원하는 어셈블리를 반드시 반환하지는 않습니다 (즉, 동일한 DLL에있을 수 있음).
Assembly.GetEntryAssembly()
이것은 포함되지 않았습니다.
System.Windows.Forms.Application.ExecutablePath;
~ 조
참고 URL : https://stackoverflow.com/questions/980202/how-do-i-find-the-current-executable-filename
'programing' 카테고리의 다른 글
AngularJS를 사용한 양식의 동적 유효성 검사 및 이름 (0) | 2020.08.21 |
---|---|
테이블 정의를 표시하는 T-SQL 쿼리? (0) | 2020.08.21 |
일부 매개 변수를 전달하여 인 텐트를 시작하는 방법은 무엇입니까? (0) | 2020.08.21 |
NaN 또는 IsNumeric에 해당하는 C #은 무엇입니까? (0) | 2020.08.21 |
jquery를 사용하여 텍스트 상자를 비활성화 하시겠습니까? (0) | 2020.08.21 |