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]
.
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]
.
Antworten:
System.AppDomain.CurrentDomain.FriendlyName
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 an System.IO.Path.GetFileName()
oder weitergeben System.IO.Path.GetFileNameWithoutExtension()
, um die gleichen Ergebnisse wie oben zu erzielen.
/?
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 die ProcessName
Eigenschaft verwenden, um den Namen herauszufinden. Unten finden Sie eine Beispiel-Konsolen-App.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
on * nixes oder .../mono.exe
Windows.
Dies sollte ausreichen:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
es sich um das genaue C # -Analogon argv
von C / C ++ handelt.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
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.
Versuche dies:
System.Reflection.Assembly.GetExecutingAssembly()
Dadurch erhalten Sie eine System.Reflection.Assembly
Instanz mit allen Daten, die Sie jemals über die aktuelle Anwendung wissen möchten. Ich denke, dass die Location
Immobilie genau das bekommen könnte, wonach Sie suchen.
CodeBase
von Location
.NET aktiv ist. Siehe blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
gibt Ihnen den Dateinamen Ihrer App wie; "MyApplication.exe"
Warum niemand dies vorgeschlagen hat, ist einfach.
Path.GetFileName(Application.ExecutablePath)
Paar mehr Optionen:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Wenn Sie den Programmnamen zum Einrichten einer Firewall-Regel benötigen, verwenden Sie:
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.
Wenn Sie unsicher sind oder Zweifel haben, laufen Sie im Kreis, schreien und schreien Sie.
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 es macht nichts Dummes, als den vhost während der Debugging-Sitzungen zurückzugeben.
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.Wenn Sie nach den vollständigen Pfadinformationen Ihrer ausführbaren Datei suchen, können Sie dies wie folgt zuverlässig tun:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Dadurch werden Probleme mit zwischengeschalteten DLLs, vshost usw. beseitigt.
Sie können verwenden Environment.GetCommandLineArgs()
, um die Argumente abzurufen und Environment.CommandLine
die tatsächliche Befehlszeile wie eingegeben abzurufen.
Sie können auch Assembly.GetEntryAssembly()
oder verwenden Process.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.
Environment.CommandLine
gibt den absoluten Pfad an, nicht die eingegebene Befehlszeile, zumindest unter Mono / Linux.
Ist das was du willst:
Assembly.GetExecutingAssembly ().Location
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:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
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:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
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
Super einfach hier:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Um den Pfad und den Namen zu erhalten
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName