Comment puis-je obtenir le nom de l'exécutable en C#?
je veux obtenir le nom du programme en cours d'exécution, qui est le nom de l'exécutable du programme. En C / C++ vous l'obtenez de args[0]
.
20 réponses
System.AppDomain.CurrentDomain.FriendlyName
- renvoie le nom du fichier avec extension (par exemple MyApp.EXE.)
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- renvoie le nom du fichier sans l'extension (par ex. MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- renvoie le chemin complet et le nom du fichier (par ex. C:\Examples\Processes\MyApp.EXE.) Vous pouvez alors passer dans System.IO.Path.GetFileName()
ou System.IO.Path.GetFileNameWithoutExtension()
pour obtenir les mêmes résultats comme ci-dessus.
System.Diagnostics.Process.GetCurrentProcess()
obtient le processus en cours. Vous pouvez utiliser la propriété ProcessName
pour comprendre le nom. Vous trouverez ci-dessous un exemple d'application de console.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
C'est le code qui a fonctionné pour moi:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
tous les exemples ci-dessus m'ont donné le nom de processus avec vshost ou le nom dll courant.
essayez ceci:
System.Reflection.Assembly.GetExecutingAssembly()
ceci vous renvoie une instance System.Reflection.Assembly
qui possède toutes les données que vous pourriez vouloir connaître sur l'application actuelle. Je pense que la propriété Location
pourrait obtenir ce que vous recherchez spécifiquement.
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
vous donnera le nom de fichier de votre application comme;" MyApplication.exe 151920920"
pourquoi personne n'a suggéré ceci, c'est simple.
Path.GetFileName(Application.ExecutablePath)
Couple plus d'options:
-
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
-
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
-
System.Reflection.Assembly.GetEntryAssembly().Location
renvoie l'emplacement du nom exe si l'assemblage n'est pas chargé de mémoire. -
System.Reflection.Assembly.GetEntryAssembly().CodeBase
renvoie L'adresse URL.
en cas d'incertitude ou de doute, courez en rond, criez et criez.
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");
}
}
Je ne peux pas prétendre avoir testé chaque option, mais cela ne fait rien de stupide comme retourner le serveur virtuel pendant les sessions de débogage.
si vous avez besoin du nom du programme pour configurer une règle pare-feu, utilisez:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
cela permettra de s'assurer que le nom est correct à la fois lors du débogage dans VisualStudio et lors de l'exécution de l'application directement dans windows.
si vous êtes à la recherche de toutes les informations sur le chemin d'accès de votre exécutable, la manière fiable de le faire est d'utiliser ce qui suit:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
cela élimine tout problème avec les DLLs intermédiaires, vshost, etc.
vous pouvez utiliser Environment.GetCommandLineArgs()
pour obtenir les arguments et Environment.CommandLine
pour obtenir la ligne de commande réelle telle qu'entrée.
aussi, vous pouvez utiliser Assembly.GetEntryAssembly()
ou Process.GetCurrentProcess()
.
cependant, lors du débogage, vous devez être prudent car cet exemple final peut donner le nom de l'exécutable de votre débogueur (en fonction de la façon dont vous attachez le débogueur) plutôt que votre exécutable, comme les autres exemples.
C'est ce que vous voulez:
Assembly.GetExecutingAssembly ().Location
pour les applications windows (forms et console) j'utilise ceci:
ajouter une référence au système.Windows.Les formes de VS alors:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
cela fonctionne correctement pour moi que j'exécute l'exécutable réel ou le débogage dans VS.
notez qu'il renvoie le nom de l'application sans l'extension.
John
Super facile, ici:
Environment.CurrentDirectory + "\" + Process.GetCurrentProcess().ProcessName
sur .net Core (ou Mono), la plupart des réponses ne s'appliquent pas lorsque le binaire définissant le processus est le binaire d'exécution de Mono ou .net Core (dotnet) et pas votre application réelle qui vous intéresse. Dans ce cas, utilisez ceci:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
cela fonctionne si vous avez besoin seulement du nom de L'Application sans extensio:
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);