2011-12-06 2 views
3

후속 조치 : this answer (및 그에 대한 의견)입니다. 어셈블리 대 프로세스에서 실행 가능한 이름을 가져 오는 것의 차이점은 무엇입니까?어셈블리 대 프로세스에서 현재 실행 파일의 이름을 가져 오는 중입니까?

Process.GetCurrentProcess().ProcessName 

System.Reflection.Assembly.GetCallingAssembly.GetEntryAssembly().CodeBase 

나는이 항상 동일합니다 겠지? 아니? 장단점이 있습니까?

답변

4

ProcessName는 운영 체제 호스트 프로세스의 이름입니다.

어셈블리 코드베이스는 지정된 프로세스 내부의 어셈블리를 가리 킵니다. 동일한 어셈블리는 다른 프로세스에 의해 호스팅 될 수 있습니다.

+0

Jon Skeet의 좋은 예 http://stackoverflow.com/a/8406779/37759 –

3

아니요, 아니요, 동일한 값을 반환 할 필요가 없습니다. 공교롭게도

, 나는 최근에이 "잡았다"로 실행 : 그들은, 또는 MSVS 디버거의 내부에서 직접 .EXE를 실행 여부에 따라 다른 값을 반환 할 수 있습니다

How do I get the .exe name of a C# console application?

그건 단지 하나의 예입니다 - 나는 다른 사람들이있을 것이라고 확신합니다.

'도움이 되길 바랍니다!

4

반드시 동일하지는 않습니다. 같은 디렉토리에 콘솔 응용 프로그램이 두 프로그램을 컴파일

// In Test.cs, compile to Test.exe 
using System; 
using System.Reflection; 

public static class Program 
{ 
    static void Main(string[] args) 
    { 
     AppDomain.CreateDomain("NewDomain").ExecuteAssembly("Test2.exe"); 
    } 
} 

// In Test2.cs, compile to Test2.exe 
using System; 
using System.Diagnostics; 
using System.Reflection; 

class Test2 
{ 
    static void Main() 
    { 
     Console.WriteLine("Process: {0}", 
          Process.GetCurrentProcess().ProcessName); 
     Console.WriteLine("Entry assembly: {0}", 
          Assembly.GetEntryAssembly().CodeBase); 
    } 
} 

출력 :

Process: Test 
Entry assembly: file:///c:/Users/Jon/Test/Test2.EXE 
관련 문제