Programming

C #에서 현재 실행 파일의 이름을 어떻게 얻습니까?

procodes 2020. 3. 4. 07:48
반응형

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



반응형