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] .

301
demandé sur SharpC 2009-03-06 00:00:07

20 réponses

System.AppDomain.CurrentDomain.FriendlyName
362
répondu Steven A. Lowe 2009-03-05 21:33:15

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.

191
répondu Lee Grissom 2011-05-05 21:19:32

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();
    }
}
100
répondu Aaron Daniels 2015-08-21 07:12:02

cela devrait suffire:

Environment.GetCommandLineArgs()[0];
88
répondu James B 2009-03-05 21:03:00

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.

20
répondu Tal Segal 2012-09-27 07:49:33

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.

18
répondu Andrew Hare 2009-03-05 21:01:49
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

vous donnera le nom de fichier de votre application comme;" MyApplication.exe 151920920"

11
répondu Teoman shipahi 2013-04-09 14:06:23

pourquoi personne n'a suggéré ceci, c'est simple.

Path.GetFileName(Application.ExecutablePath)
11
répondu xmen 2014-04-24 12:52:45

Couple plus d'options:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
9
répondu JohnB 2011-01-02 22:05:13
  • 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.
8
répondu langpavel 2012-01-17 18:58:41

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.

7
répondu Orwellophile 2012-01-08 07:25:28

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.

7
répondu Mark Uebel 2016-04-29 17:44:06

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.

5
répondu theMayer 2013-03-14 06:01:29

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.

4
répondu Jeff Yates 2010-11-03 14:18:58

C'est ce que vous voulez:

Assembly.GetExecutingAssembly ().Location
2
répondu Frederik Gheysels 2009-03-05 21:03:24

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

1
répondu John 2017-07-15 00:06:56

Essayez Application.Exécutablepath

0
répondu Bean 2016-11-22 23:17:56

Super facile, ici:

Environment.CurrentDirectory + "\" + Process.GetCurrentProcess().ProcessName
0
répondu Delusional Ghost 2017-02-03 18:13:26

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);
0
répondu Tobias 2017-03-31 21:53:32

cela fonctionne si vous avez besoin seulement du nom de L'Application sans extensio:

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
0
répondu RJN 2018-05-23 08:03:41