3 Stimmen

Name der aktuellen ausführbaren Datei aus Assembly vs. Prozess?

Dies ist eine Folgemaßnahme zu diese Antwort (und die Kommentare dazu). Was ist der Unterschied zwischen dem Abrufen eines ausführbaren Namens aus einer Assembly und einem Prozess?

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

gegen

Process.GetCurrentProcess().ProcessName

Ich nehme an, dass diese immer gleich sein werden? Nein? Gibt es Vor- und Nachteile?

6voto

Jon Skeet Punkte 1325502

Sie sind nicht unbedingt dasselbe. Kompilieren Sie diese beiden Programme als Konsolenanwendungen im selben Verzeichnis:

// 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);
    }
}

Ausgabe:

Process: Test
Entry assembly: file:///c:/Users/Jon/Test/Test2.EXE

4voto

Simon Mourier Punkte 122836

ProcessName ist der Name des Host-Prozesses des Betriebssystems.

Assembly CodeBase verweist auf eine Assembly innerhalb eines bestimmten Prozesses. Dieselbe Assembly kann von verschiedenen Prozessen gehostet werden.

3voto

paulsm4 Punkte 106654

Nein, sie müssen nicht dieselben Werte zurückgeben.

Zufälligerweise bin ich vor kurzem auf dieses "Problem" gestoßen: Sie können UNTERSCHIEDLICHE Werte zurückgeben, je nachdem, ob Sie die .exe direkt oder aus dem MSVS-Debugger heraus ausführen:

Wie erhalte ich den .exe-Namen einer C#-Konsolenanwendung?

Das ist nur ein Beispiel - ich bin sicher, es gibt noch andere.

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X