C #에서 현재 실행 파일의 이름을 어떻게 얻습니까?
현재 실행중인 프로그램의 이름, 즉 프로그램의 실행 파일 이름을 얻고 싶습니다. C / C ++에서는에서 가져옵니다 args[0]
.
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
-확장자가있는 파일 이름을 반환합니다 (예 : MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- 확장자가 없는 파일 이름 을 반환합니다 (예 : MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
-전체 경로와 파일 이름을 반환합니다 (예 : C : \ Examples \ Processes \ MyApp.exe). 그런 다음 이것을 전달 System.IO.Path.GetFileName()
하거나 System.IO.Path.GetFileNameWithoutExtension()
위와 동일한 결과를 얻을 수 있습니다.
System.Diagnostics.Process.GetCurrentProcess()
현재 실행중인 프로세스를 가져옵니다. ProcessName
속성을 사용 하여 이름을 알아낼 수 있습니다 . 아래는 샘플 콘솔 앱입니다.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
이것으로 충분합니다 :
Environment.GetCommandLineArgs()[0];
이것은 나를 위해 일한 코드입니다.
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
위의 모든 예제는 vshost 또는 실행중인 dll 이름을 가진 processName을 제공했습니다.
이 시도:
System.Reflection.Assembly.GetExecutingAssembly()
System.Reflection.Assembly
현재 애플리케이션에 대해 알고 싶은 모든 데이터가 있는 인스턴스를 반환합니다 . 나는 그 Location
속성이 당신이 구체적으로 추구 한 것을 얻을 수 있다고 생각합니다 .
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
앱의 FileName을 제공합니다. "MyApplication.exe"
왜 아무도 이것을 간단하게 제안하지 않았습니까?
Path.GetFileName(Application.ExecutablePath)
더 많은 옵션 :
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
불확실하거나 의심 스러우면 원을 향해 비명을 지르며 소리를 지르십시오.
class Ourself
{
public static string OurFileName() {
System.Reflection.Assembly _objParentAssembly;
if (System.Reflection.Assembly.GetEntryAssembly() == null)
_objParentAssembly = System.Reflection.Assembly.GetCallingAssembly();
else
_objParentAssembly = System.Reflection.Assembly.GetEntryAssembly();
if (_objParentAssembly.CodeBase.StartsWith("http://"))
throw new System.IO.IOException("Deployed from URL");
if (System.IO.File.Exists(_objParentAssembly.Location))
return _objParentAssembly.Location;
if (System.IO.File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName))
return System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName;
if (System.IO.File.Exists(System.Reflection.Assembly.GetExecutingAssembly().Location))
return System.Reflection.Assembly.GetExecutingAssembly().Location;
throw new System.IO.IOException("Assembly not found");
}
}
각 옵션을 테스트했다고 주장 할 수는 없지만 디버깅 세션 중에 호스트를 반환하는 것과 같은 어리석은 행동은 없습니다.
System.Reflection.Assembly.GetEntryAssembly().Location
어셈블리가 메모리에서로드되지 않으면 exe 이름의 위치를 반환합니다.System.Reflection.Assembly.GetEntryAssembly().CodeBase
위치를 URL로 반환합니다.
방화벽 규칙을 설정하기 위해 프로그램 이름이 필요한 경우 다음을 사용하십시오.
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
이렇게하면 VisualStudio에서 디버깅 할 때와 Windows에서 직접 앱을 실행할 때 이름이 올바른지 확인할 수 있습니다.
실행 파일의 전체 경로 정보를 찾으려면 신뢰할 수있는 방법은 다음을 사용하는 것입니다.
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
이것은 중간 dll, vshost 등의 문제를 제거합니다.
Environment.GetCommandLineArgs()
인수 Environment.CommandLine
를 얻고 입력 한대로 실제 명령 행 을 얻는 데 사용할 수 있습니다 .
Assembly.GetEntryAssembly()
또는 을 사용할 수도 Process.GetCurrentProcess()
있습니다.
그러나 디버깅 할 때이 마지막 예제는 다른 예제와 마찬가지로 실행 파일이 아닌 디버거의 실행 파일 이름 (디버거 연결 방법에 따라 다름)을 제공 할 수 있으므로주의해야합니다.
이것이 당신이 원하는 것입니까?
Assembly.GetExecutingAssembly ().Location
매우 쉬운 방법 :
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
.Net Core (또는 Mono)에서 프로세스를 정의하는 바이너리가 Mono 또는 .Net Core (dotnet)의 런타임 바이너리이고 관심있는 실제 응용 프로그램이 아닌 경우 대부분의 답변이 적용되지 않습니다. 이것을 사용하십시오 :
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
Windows 앱 (양식 및 콘솔)의 경우 다음을 사용합니다.
VS에서 System.Windows.Forms에 대한 참조를 추가 한 후 다음을 수행하십시오.
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
실제 실행 파일을 실행하거나 VS 내에서 디버깅하는지 여부에 따라 올바르게 작동합니다.
확장명없이 응용 프로그램 이름을 반환합니다.
남자
확장명이없는 응용 프로그램 이름 만 필요한 경우 작동합니다.
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
Application.ExecutablePath를 사용해보십시오
참고 : https://stackoverflow.com/questions/616584/how-do-i-get-the-name-of-the-current- executable-in-c
'Programming' 카테고리의 다른 글
Xcode 4에서 프로젝트 이름 바꾸기 (0) | 2020.03.04 |
---|---|
글꼴 멋진 아이콘의 아이콘 색상, 크기 및 그림자 스타일을 지정하는 방법 (0) | 2020.03.04 |
location.host와 location.hostname 및 크로스 브라우저 호환성? (0) | 2020.03.04 |
vim에서 탭을 공백으로 바꿉니다. (0) | 2020.03.04 |
내 응용 프로그램에 "암호화가 포함되어 있습니까?" (0) | 2020.03.04 |