2011-12-06 19 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?

それはちょうど1つの例です - 私は他のものがあるかもしれないと確信しています。

'お手伝いをしてください!

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 
関連する問題