Je veux obtenir le nom du programme en cours d'exécution, c'est-à-dire le nom exécutable du programme. En C / C ++, vous l'obtenez args[0]
.
Je veux obtenir le nom du programme en cours d'exécution, c'est-à-dire le nom exécutable du programme. En C / C ++, vous l'obtenez args[0]
.
Réponses:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
applications déployées sous Click-Once. Pour nous, cela renvoie " DefaultDomain ", et non le nom exe d'origine.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Renvoie le nom de 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 \ Processes \ MyApp.exe). Vous pouvez ensuite le passer dans System.IO.Path.GetFileName()
ou System.IO.Path.GetFileNameWithoutExtension()
pour obtenir les mêmes résultats que ci-dessus.
/?
commutateur), car l'utilisation de l'extension et du chemin l'encombrent inutilement.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
renvoie MyApp.vshost pour moi.
System.Diagnostics.Process.GetCurrentProcess()
obtient le processus en cours d'exécution. Vous pouvez utiliser la ProcessName
propriété pour déterminer le nom. Voici un exemple d'application console.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
sur * nixes ou .../mono.exe
sur Windows.
Cela devrait suffire:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
c'est l'analogue C # exact argv
de C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Voici 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 processName avec vshost ou le nom de la DLL en cours d'exécution.
Essaye ça:
System.Reflection.Assembly.GetExecutingAssembly()
Cela vous renvoie une System.Reflection.Assembly
instance qui contient toutes les données que vous pourriez souhaiter connaître sur l'application actuelle. Je pense que la Location
propriété pourrait obtenir ce que vous recherchez spécifiquement.
CodeBase
au lieu de Location
dans le cas où la fonctionnalité de cliché instantané de .NET est active. Voir blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
vous donnera FileName de votre application comme; "MyApplication.exe"
Pourquoi personne n'a suggéré cela, c'est simple.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
le code source de .
Quelques options supplémentaires:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
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 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 vhost pendant les sessions de débogage.
System.Reflection.Assembly.GetEntryAssembly().Location
renvoie l'emplacement du nom exe si l'assembly n'est pas chargé à partir de la mémoire.System.Reflection.Assembly.GetEntryAssembly().CodeBase
renvoie l'emplacement comme URL.SI vous recherchez les informations de chemin complet de votre exécutable, le moyen fiable de le faire est d'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 est entrée.
Vous pouvez également 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 (selon la façon dont vous attachez le débogueur) plutôt que votre exécutable, comme le peuvent les autres exemples.
Environment.CommandLine
donne le chemin absolu, pas la ligne de commande entrée, au moins sur Mono / Linux.
C'est ce que tu veux:
Assembly.GetExecutingAssembly ().Location
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 non votre application réelle qui vous intéresse. Dans ce cas , utilisez ceci:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
peut retourner null.
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 réel ou que je débogue dans VS.
Notez qu'il renvoie le nom de l'application sans l'extension.
John
Super facile, ici:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Pour obtenir le chemin et le nom
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName