현재 실행중인 프로그램의 이름, 즉 프로그램의 실행 파일 이름을 얻고 싶습니다. C / C ++에서는에서 가져옵니다 args[0]
.
현재 실행중인 프로그램의 이름, 즉 프로그램의 실행 파일 이름을 얻고 싶습니다. C / C ++에서는에서 가져옵니다 args[0]
.
답변:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
Click-Once 배포 응용 프로그램에서 사용하는 데 문제가 있습니다 . 우리에게는 원래 exe 이름이 아닌 " DefaultDomain " 이 반환 됩니다.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
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()
위와 동일한 결과를 얻을 수 있습니다.
/?
스위치) 에 매우 유용 합니다. 확장자와 경로를 사용하면 불필요하게 복잡해지기 때문입니다.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
MyApp.vshost 를 반환합니다 .
System.Diagnostics.Process.GetCurrentProcess()
현재 실행중인 프로세스를 가져옵니다. ProcessName
속성을 사용 하여 이름을 알아낼 수 있습니다 . 아래는 샘플 콘솔 앱입니다.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes 또는 .../mono.exe
Windows 에서 변형 됩니다.
이것으로 충분합니다 :
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
의 정확한 C # 아날로그 이기 때문에 가장 좋은 대답입니다 argv
.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
이것은 나를 위해 일한 코드입니다.
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
위의 모든 예제는 vshost 또는 실행중인 dll 이름을 가진 processName을 제공했습니다.
이 시도:
System.Reflection.Assembly.GetExecutingAssembly()
System.Reflection.Assembly
현재 애플리케이션에 대해 알고 싶은 모든 데이터가 있는 인스턴스를 반환합니다 . 나는 그 Location
속성이 당신이 구체적으로 추구 한 것을 얻을 수 있다고 생각합니다 .
CodeBase
대신 사용 하는 것이 더 안전 할 수 있습니다 Location
. blogs.msdn.com/suzcook/archive/2003/06/26/…
더 많은 옵션 :
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
방화벽 규칙을 설정하기 위해 프로그램 이름이 필요한 경우 다음을 사용하십시오.
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
이렇게하면 VisualStudio에서 디버깅 할 때와 Windows에서 직접 앱을 실행할 때 이름이 올바른지 확인할 수 있습니다.
불확실하거나 의심 스러우면 원을 향해 비명을 지르며 소리를 지르십시오.
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로 반환합니다.실행 파일의 전체 경로 정보를 찾으려면 신뢰할 수있는 방법은 다음을 사용하는 것입니다.
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
이것은 중간 dll, vshost 등과 관련된 문제를 제거합니다.
Environment.GetCommandLineArgs()
인수를 얻기 위해 사용할 수 있으며Environment.CommandLine
를 얻고 입력 한대로 실제 명령 행 .
또한, 당신은 Assembly.GetEntryAssembly()
또는Process.GetCurrentProcess()
있습니다.
그러나 디버깅 할 때이 마지막 예제는 다른 예제와 마찬가지로 실행 파일이 아닌 디버거의 실행 파일 이름 (디버거 연결 방법에 따라 다름)을 제공 할 수 있으므로주의해야합니다.
Environment.CommandLine
최소한 Mono / Linux에서는 입력 된 명령 줄이 아닌 절대 경로를 제공합니다.
이것이 당신이 원하는 것입니까?
Assembly.GetExecutingAssembly ().Location
.Net Core (또는 Mono)에서 프로세스를 정의하는 바이너리가 Mono 또는 .Net Core (dotnet)의 런타임 바이너리이고 관심있는 실제 응용 프로그램이 아닌 경우 대부분의 답변이 적용되지 않습니다. 이것을 사용하십시오 :
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
null을 반환 할 수 있습니다.
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 내에서 디버깅하는지 여부에 따라 올바르게 작동합니다.
확장명없이 응용 프로그램 이름을 반환합니다.
남자
매우 쉬운 방법 :
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName