it-swarm.com.de

Wie bekomme ich den Namen der aktuellen ausführbaren Datei in C #?

Ich möchte den Namen des aktuell laufenden Programms erhalten, dh den Namen der ausführbaren Datei des Programms. In C/C++ erhalten Sie es von args[0].

314
Joakim
System.AppDomain.CurrentDomain.FriendlyName
377
Steven A. Lowe

System.AppDomain.CurrentDomain.FriendlyName - Gibt den Dateinamen mit der Erweiterung zurück (z. B. MyApp.exe). 

System.Diagnostics.Process.GetCurrentProcess().ProcessName - Gibt den Dateinamen ohne die Erweiterung zurück (z. B. MyApp).

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName - Gibt den vollständigen Pfad und Dateinamen zurück (z. B. C:\Examples\Processes\MyApp.exe). Sie können dies dann an System.IO.Path.GetFileName() oder System.IO.Path.GetFileNameWithoutExtension() übergeben, um dieselben Ergebnisse wie oben zu erzielen.

206
Lee Grissom

System.Diagnostics.Process.GetCurrentProcess() ruft den aktuell laufenden Prozess ab. Sie können die Eigenschaft ProcessName verwenden, um den Namen herauszufinden. Unten finden Sie eine Beispielkonsolen-App.

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Process.GetCurrentProcess().ProcessName);
        Console.ReadLine();
    }
}
100
Aaron Daniels

Dies sollte ausreichen:

Environment.GetCommandLineArgs()[0];
90
James B

Dies ist der Code, der für mich funktioniert hat:

string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);

Alle obigen Beispiele gaben mir den Prozessnamen mit vshost oder den Namen der laufenden DLL.

20
Tal Segal

Versuche dies:

System.Reflection.Assembly.GetExecutingAssembly()

Daraufhin erhalten Sie eine System.Reflection.Assembly -Instanz, die alle Daten enthält, die Sie möglicherweise über die aktuelle Anwendung wissen möchten. Ich denke, dass die Location-Eigenschaft möglicherweise genau das bekommt, was Sie suchen.

18
Andrew Hare

Warum niemand dies vorgeschlagen hat, ist einfach.

Path.GetFileName(Application.ExecutablePath)
11
xmen
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

wird dir den Dateinamen deiner App geben; "MyApplication.exe"

11
Teoman shipahi

Paar mehr Optionen:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
10
JohnB
  • System.Reflection.Assembly.GetEntryAssembly().Location gibt die Position des exe-Namens zurück, wenn Assembly nicht aus dem Speicher geladen wird.
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase gibt den Ort als URL zurück.
8
langpavel

Wenn Sie den Programmnamen zum Einrichten einer Firewall-Regel benötigen, verwenden Sie Folgendes:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

Dadurch wird sichergestellt, dass der Name sowohl beim Debuggen in VisualStudio als auch beim direkten Ausführen der App in Windows korrekt ist.

7
Mark Uebel

Wenn Sie unsicher sind oder Zweifel haben, laufen Sie im Kreis, schreien und schreien. 

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

Ich kann nicht behaupten, jede Option getestet zu haben, aber sie tut nichts Dummes, wie den vhost während Debugging-Sitzungen zurückzugeben.

7
Orwellophile

WENN Sie nach den vollständigen Pfadinformationen Ihrer ausführbaren Datei suchen, können Sie dies folgendermaßen tun:

   var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
                       .FileName.Replace(".vshost", "");

Dadurch werden Probleme mit zwischengeschalteten DLLs, vshost usw. beseitigt.

5
theMayer

Sie können Environment.GetCommandLineArgs() verwenden, um die Argumente zu erhalten, und Environment.CommandLine , um die eigentliche Befehlszeile zu erhalten, wie sie eingegeben wurde.

Sie können auch Assembly.GetEntryAssembly() oder Process.GetCurrentProcess() verwenden.

Beim Debuggen sollten Sie jedoch vorsichtig sein, da dieses letzte Beispiel möglicherweise den Namen der ausführbaren Datei Ihres Debuggers (abhängig davon, wie Sie den Debugger anhängen) und nicht Ihre ausführbare Datei angibt, wie in den anderen Beispielen.

4
Jeff Yates

Ist das was du willst:

Assembly.GetExecutingAssembly ().Location
2

Super einfach hier:

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
2

Für Windows-Apps (Formulare und Konsole) verwende ich Folgendes:

Fügen Sie in VS einen Verweis auf System.Windows.Forms hinzu:

using System.Windows.Forms;
namespace whatever
{
    class Program
    {
        static string ApplicationName = Application.ProductName.ToString();
        static void Main(string[] args)
        {
            ........
        }
    }
}

Dies funktioniert korrekt für mich, unabhängig davon, ob ich die eigentliche ausführbare Datei oder das Debuggen in VS ausgeführt habe.

Beachten Sie, dass der Anwendungsname ohne die Erweiterung zurückgegeben wird.

John

1
John

Versuchen Sie Application.ExecutablePath

0
Bean

Dies funktioniert, wenn Sie nur den Anwendungsnamen ohne Erweiterung benötigen:

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
0
RJN

In .Net Core (oder Mono) gelten die meisten Antworten nicht, wenn die den Prozess definierende Binärdatei die Laufzeitbinärdatei von Mono oder .Net Core (dotnet) ist und nicht Ihre eigentliche Anwendung, die Sie interessiert , benutze das:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
0
Tobias