Ich möchte den Namen des aktuell ausgeführten Programms erhalten, dh den ausführbaren Namen des Programms. In C / C ++ erhalten Sie es von args[0]
.
c#
command-line
Joakim
quelle
quelle
Antworten:
quelle
System.AppDomain.CurrentDomain.FriendlyName
unter Click-Once bereitgestellten Anwendungen. Für uns gibt dies " DefaultDomain " zurück und nicht den ursprünglichen Exe-Namen.string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
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 Erweiterung zurück (z. B. MyApp).System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Gibt den vollständigen Pfad und den Dateinamen zurück (z. B. C: \ Examples \ Processes \ MyApp.exe). Sie können dies dann anSystem.IO.Path.GetFileName()
oder weitergebenSystem.IO.Path.GetFileNameWithoutExtension()
, um die gleichen Ergebnisse wie oben zu erzielen.quelle
/?
Schalter), da die Verwendung der Erweiterung und des Pfads ihn nur unnötig überladen.GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
gibt MyApp.vshost für mich zurück.System.Diagnostics.Process.GetCurrentProcess()
Ruft den aktuell ausgeführten Prozess ab. Sie können dieProcessName
Eigenschaft verwenden, um den Namen herauszufinden. Unten finden Sie eine Beispiel-Konsolen-App.quelle
.../bin/mono
on * nixes oder.../mono.exe
Windows.Dies sollte ausreichen:
quelle
Environment.GetCommandLineArgs()
es sich um das genaue C # -Analogonargv
von C / C ++ handelt.Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Dies ist der Code, der für mich funktioniert hat:
Alle obigen Beispiele gaben mir den Prozessnamen mit vshost oder den Namen der laufenden DLL.
quelle
Versuche dies:
Dadurch erhalten Sie eine
System.Reflection.Assembly
Instanz mit allen Daten, die Sie jemals über die aktuelle Anwendung wissen möchten. Ich denke, dass dieLocation
Immobilie genau das bekommen könnte, wonach Sie suchen.quelle
CodeBase
vonLocation
.NET aktiv ist. Siehe blogs.msdn.com/suzcook/archive/2003/06/26/…gibt Ihnen den Dateinamen Ihrer App wie; "MyApplication.exe"
quelle
Warum niemand dies vorgeschlagen hat, ist einfach.
quelle
Application.ExecutablePath
‚s - Quellcode .Paar mehr Optionen:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
quelle
Wenn Sie den Programmnamen zum Einrichten einer Firewall-Regel benötigen, verwenden Sie:
Dadurch wird sichergestellt, dass der Name sowohl beim Debuggen in VisualStudio als auch beim direkten Ausführen der App in Windows korrekt ist.
quelle
Wenn Sie unsicher sind oder Zweifel haben, laufen Sie im Kreis, schreien und schreien Sie.
Ich kann nicht behaupten, jede Option getestet zu haben, aber es macht nichts Dummes, als den vhost während der Debugging-Sitzungen zurückzugeben.
quelle
System.Reflection.Assembly.GetEntryAssembly().Location
Gibt den Speicherort des Exe-Namens zurück, wenn die Assembly nicht aus dem Speicher geladen wurde.System.Reflection.Assembly.GetEntryAssembly().CodeBase
Gibt den Speicherort als URL zurück.quelle
Wenn Sie nach den vollständigen Pfadinformationen Ihrer ausführbaren Datei suchen, können Sie dies wie folgt zuverlässig tun:
Dadurch werden Probleme mit zwischengeschalteten DLLs, vshost usw. beseitigt.
quelle
Sie können verwenden
Environment.GetCommandLineArgs()
, um die Argumente abzurufen undEnvironment.CommandLine
die tatsächliche Befehlszeile wie eingegeben abzurufen.Sie können auch
Assembly.GetEntryAssembly()
oder verwendenProcess.GetCurrentProcess()
.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) anstelle Ihrer ausführbaren Datei angibt, wie auch die anderen Beispiele.
quelle
Environment.CommandLine
gibt den absoluten Pfad an, nicht die eingegebene Befehlszeile, zumindest unter Mono / Linux.Ist das was du willst:
quelle
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, an der Sie interessiert sind. In diesem Fall , benutze das:
quelle
GetEntryAssembly()
kann null zurückgeben.Für Windows-Apps (Formulare und Konsole) verwende ich Folgendes:
Fügen Sie dann einen Verweis auf System.Windows.Forms in VS hinzu:
Dies funktioniert für mich korrekt, unabhängig davon, ob ich die eigentliche ausführbare Datei ausführe oder in VS debugge.
Beachten Sie, dass der Anwendungsname ohne die Erweiterung zurückgegeben wird.
John
quelle
Super einfach hier:
quelle
Dies funktioniert, wenn Sie nur den Anwendungsnamen ohne Erweiterung benötigen:
quelle
Um den Pfad und den Namen zu erhalten
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName
quelle