Voglio ottenere il nome del programma attualmente in esecuzione, ovvero il nome eseguibile del programma. In C / C ++ lo ottieni da args[0]
.
Voglio ottenere il nome del programma attualmente in esecuzione, ovvero il nome eseguibile del programma. In C / C ++ lo ottieni da args[0]
.
Risposte:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
applicazioni distribuite Click-Once. Per noi, questo restituisce " DefaultDomain " e non il nome exe originale.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Restituisce il nome file con estensione (ad esempio MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Restituisce il nome file senza estensione (ad es. MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Restituisce il percorso completo e il nome file (ad es. C: \ Esempi \ Processi \ MyApp.exe). È quindi possibile passare a questo System.IO.Path.GetFileName()
o System.IO.Path.GetFileNameWithoutExtension()
per ottenere gli stessi risultati di cui sopra.
/?
switch) all'interno del programma , poiché l'uso dell'estensione e del percorso lo ingombra inutilmente.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
restituisce MyApp.vshost per me.
System.Diagnostics.Process.GetCurrentProcess()
ottiene il processo attualmente in esecuzione. Puoi usare la ProcessName
proprietà per capire il nome. Di seguito è un'app console di esempio.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nix o .../mono.exe
su Windows.
Questo dovrebbe bastare:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
è l'esatto analogo C # di argv
da C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Questo è il codice che ha funzionato per me:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Tutti gli esempi sopra mi hanno dato processName con vshost o il nome dll in esecuzione.
Prova questo:
System.Reflection.Assembly.GetExecutingAssembly()
Questo ti restituisce System.Reflection.Assembly
un'istanza che contiene tutti i dati che potresti voler sapere sull'applicazione corrente. Penso che la Location
proprietà potrebbe ottenere ciò che stai cercando specificamente.
CodeBase
invece che Location
nel caso in cui la funzione di copia shadow di .NET sia attiva. Vedi blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
ti darà FileName della tua app come; "MyApplication.exe"
Perché nessuno ha suggerito questo, è semplice.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
's codice sorgente .
Abbina più opzioni:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Se è necessario il nome del programma per impostare una regola firewall, utilizzare:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Ciò garantirà che il nome sia corretto sia durante il debug in VisualStudio sia quando si esegue l'app direttamente in Windows.
In caso di incertezza o dubbio, corri in cerchio, grida e grida.
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");
}
}
Non posso affermare di aver testato ciascuna opzione, ma non fa nulla di stupido come restituire il vhost durante le sessioni di debug.
System.Reflection.Assembly.GetEntryAssembly().Location
restituisce la posizione del nome exe se assembly non è caricato dalla memoria.System.Reflection.Assembly.GetEntryAssembly().CodeBase
restituisce la posizione come URL.SE stai cercando le informazioni complete sul percorso del tuo eseguibile, il modo affidabile per farlo è usare quanto segue:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Questo elimina qualsiasi problema con dll intermedie, vshost, ecc.
È possibile utilizzare Environment.GetCommandLineArgs()
per ottenere gli argomenti e Environment.CommandLine
per ottenere la riga di comando effettiva immessa.
Inoltre, puoi usare Assembly.GetEntryAssembly()
o Process.GetCurrentProcess()
.
Tuttavia, durante il debug, è necessario fare attenzione poiché questo esempio finale può dare il nome dell'eseguibile del debugger (a seconda di come si collega il debugger) anziché l'eseguibile, come gli altri esempi.
Environment.CommandLine
fornisce il percorso assoluto, non la riga di comando inserita, almeno su Mono / Linux.
È questo che vuoi:
Assembly.GetExecutingAssembly ().Location
Su .Net Core (o Mono), la maggior parte delle risposte non si applicherà quando il binario che definisce il processo è il binario di runtime di Mono o .Net Core (dotnet) e non la tua vera applicazione. In quel caso , Usa questo:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
può restituire null.
Per le app di Windows (moduli e console) uso questo:
Aggiungi un riferimento a System.Windows.Forms in VS quindi:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Questo funziona correttamente per me se sto eseguendo il vero eseguibile o il debug all'interno di VS.
Si noti che restituisce il nome dell'applicazione senza l'estensione.
John
Super facile, qui:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Per ottenere il percorso e il nome
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName