Je veux obtenir le nom du programme en cours d'exécution, c'est-à-dire le nom du programme exécutable. En C/C++, vous l'obtenez à partir de args[0]
.
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
- Retourne le nom du fichier avec l'extension (par exemple, MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Renvoie le nom de fichier sans extension (par exemple, MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Renvoie le chemin d'accès complet et le nom du fichier (par exemple, C:\Examples\Process\MyApp.exe). Vous pouvez ensuite passer ceci dans System.IO.Path.GetFileName()
ou System.IO.Path.GetFileNameWithoutExtension()
pour obtenir les mêmes résultats que ci-dessus.
System.Diagnostics.Process.GetCurrentProcess()
obtient le processus en cours d'exécution. Vous pouvez utiliser la propriété ProcessName
pour déterminer 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();
}
}
Cela devrait suffire:
Environment.GetCommandLineArgs()[0];
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 de la DLL en cours d'exécution.
Essaye ça:
System.Reflection.Assembly.GetExecutingAssembly()
Cela vous renvoie une instance System.Reflection.Assembly
qui contient toutes les données que vous pourriez souhaiter connaître sur l’application actuelle. Je pense que la propriété Location
pourrait obtenir précisément ce que vous recherchez.
Pourquoi personne n'a suggéré cela, c'est simple.
Path.GetFileName(Application.ExecutablePath)
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
vous donnera FileName de votre application comme; "MyApplication.exe"
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 d'exe si l'assembly n'est pas chargé de la mémoire.System.Reflection.Assembly.GetEntryAssembly().CodeBase
renvoie l'emplacement en tant qu'URL.Si vous avez besoin du nom du programme pour configurer une règle de pare-feu, utilisez:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Cela garantira que le nom est correct lors du débogage dans VisualStudio et lors de l'exécution de l'application directement dans Windows.
En cas de doute 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 de renvoyer le vhost pendant les sessions de débogage.
SI vous recherchez l’information complète sur le chemin de votre exécutable, la méthode la plus fiable consiste à utiliser les éléments suivants:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Cela élimine tous les problèmes avec les dll 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’elle a été entrée.
Vous pouvez aussi utiliser Assembly.GetEntryAssembly()
ou Process.GetCurrentProcess()
.
Cependant, lors du débogage, vous devez faire attention car cet exemple final peut donner le nom de l'exécutable de votre débogueur (selon la façon dont vous attachez le débogueur) plutôt que votre exécutable, comme les autres exemples.
C'est ce que tu veux:
Assembly.GetExecutingAssembly ().Location
Pour les applications Windows (formulaires et console), j'utilise ceci:
Ajoutez une référence à System.Windows.Forms dans VS puis:
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 ou que je débogue dans VS.
Notez qu'il renvoie le nom de l'application sans l'extension.
John
Essayez Application.ExecutablePath
Cela fonctionne si vous n'avez besoin que du nom de l'application sans extension:
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
Sur .Net Core (ou Mono), la plupart des réponses ne s'appliquent pas lorsque le fichier binaire définissant le processus est le fichier binaire d'exécution de Mono ou .Net Core (dotnet) et non votre application qui vous intéresse , utilisez ceci:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);