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]
.
c#
command-line
Joakim
la source
la source
Réponses:
la source
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 dansSystem.IO.Path.GetFileName()
ouSystem.IO.Path.GetFileNameWithoutExtension()
pour obtenir les mêmes résultats que ci-dessus.la source
/?
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 laProcessName
propriété pour déterminer le nom. Voici un exemple d'application console.la source
.../bin/mono
sur * nixes ou.../mono.exe
sur Windows.Cela devrait suffire:
la source
Environment.GetCommandLineArgs()
c'est l'analogue C # exactargv
de C / C ++.Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Voici le code qui a fonctionné pour moi:
Tous les exemples ci-dessus m'ont donné le processName avec vshost ou le nom de la DLL en cours d'exécution.
la source
Essaye ça:
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 laLocation
propriété pourrait obtenir ce que vous recherchez spécifiquement.la source
CodeBase
au lieu deLocation
dans le cas où la fonctionnalité de cliché instantané de .NET est active. Voir blogs.msdn.com/suzcook/archive/2003/06/26/…vous donnera FileName de votre application comme; "MyApplication.exe"
la source
Pourquoi personne n'a suggéré cela, c'est simple.
la source
Application.ExecutablePath
le code source de .Quelques options supplémentaires:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
la source
Si vous avez besoin du nom du programme pour configurer une règle de pare-feu, utilisez:
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.
la source
En cas d'incertitude ou de doute, courez en rond, criez et criez.
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.
la source
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.la source
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:
Cela élimine tous les problèmes avec les DLL intermédiaires, vshost, etc.
la source
Vous pouvez utiliser
Environment.GetCommandLineArgs()
pour obtenir les arguments etEnvironment.CommandLine
pour obtenir la ligne de commande réelle telle qu'elle est entrée.Vous pouvez également utiliser
Assembly.GetEntryAssembly()
ouProcess.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.
la source
Environment.CommandLine
donne le chemin absolu, pas la ligne de commande entrée, au moins sur Mono / Linux.C'est ce que tu veux:
la source
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:
la source
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:
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
la source
Super facile, ici:
la source
Cela fonctionne si vous n'avez besoin que du nom de l'application sans extension:
la source
Pour obtenir le chemin et le nom
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName
la source