Comment trouver le chemin de l'application dans une application console?
Dans Windows Forms , je peux utiliser Application.StartupPath
pour trouver le chemin actuel, mais cela ne semble pas être disponible dans une application console.
c#
.net
console
console-application
JSmyth
la source
la source
Réponses:
System.Reflection.Assembly.GetExecutingAssembly()
. 1Location
Combinez cela avec
System.IO.Path.GetDirectoryName
si tout ce que vous voulez est le répertoire.la source
GetExecutingAssembly
retourne l'assembly qui contient le code en cours d'exécution . Il ne s'agit pas nécessairement de l' assembly .exe de la console . Il peut s'agir d'un assemblage qui a été chargé à partir d'un emplacement totalement différent. Vous devrez utiliserGetEntryAssembly
! Notez également que celaCodeBase
peut ne pas être défini lorsque l'assembly est dans le GAC. La meilleure alternative estAppDomain.CurrentDomain.BaseDirectory
.Vous pouvez utiliser le code suivant pour obtenir le répertoire d'application actuel.
la source
BaseDirectory
peut être défini lors de l'exécution? Il n'a qu'un getter.Vous avez deux options pour trouver le répertoire de l'application, que vous choisirez dépendra de votre objectif.
la source
var localDirectory = new Uri(directory).LocalPath;
Probablement un peu en retard mais cela vaut la peine d'être mentionné:
Ou plus correctement pour obtenir uniquement le chemin du répertoire:
Éditer:
Beaucoup de gens ont souligné qu'il
GetCommandLineArgs
n'est pas garanti de retourner le nom du programme. Voir Le premier mot sur la ligne de commande est le nom du programme uniquement par convention . L'article indique que "Bien que très peu de programmes Windows utilisent cette bizarrerie (je n'en connais pas moi-même)". Il est donc possible de «falsifier»GetCommandLineArgs
, mais nous parlons d'une application console. Les applications de console sont généralement rapides et sales. Cela correspond donc à ma philosophie KISS.la source
Pour toute personne intéressée par les applications Web asp.net. Voici mes résultats de 3 méthodes différentes
résultat
l'application s'exécute physiquement à partir de "C: \ inetpub \ SBSPortal_staging", donc la première solution n'est certainement pas appropriée pour les applications Web.
la source
La réponse ci-dessus était de 90% de ce dont j'avais besoin, mais a renvoyé un Uri au lieu d'un chemin normal pour moi.
Comme expliqué dans le message des forums MSDN, comment convertir le chemin URI en chemin de fichier normal? , J'ai utilisé ce qui suit:
la source
File.CreateDirectory(path)
ça, cela vous donnera l'exception qu'il n'autorise pas les chemins URI ...#
caractère). L'identifiant et tout ce qui le suit est tronqué du chemin résultant.new Uri
etSystem.IO.Path.GetDirectoryName
? Cela vous donne une chaîne de chemin normale au lieu d'unUri
.Vous cherchez peut-être à faire ceci:
la source
vous pouvez utiliser celui-ci à la place.
la source
Si vous recherchez un moyen compatible avec .NET Core, utilisez
Cela a été introduit dans .NET Framework 4.6 et .NET Core 1.0 (et .NET Standard 1.3). Voir: AppContext.BaseDirectory, propriété .
Selon cette page ,
la source
Process.GetCurrentProcess().MainModule.FileName
Pour les applications console, vous pouvez essayer ceci:
Sortie (sur ma machine locale):
Ou vous pouvez essayer (il y a une barre oblique inverse supplémentaire à la fin):
Production:
la source
BaseDirectory
peut être réglé au moment de l'exécution. Il n'est PAS garanti d'être correct"J'ai utilisé ce code et j'ai trouvé la solution.
la source
Vous pouvez simplement ajouter à vos références de projet
System.Windows.Forms
, puis utiliser leSystem.Windows.Forms.Application.StartupPath
comme d'habitude.Donc, pas besoin de méthodes plus compliquées ou d'utiliser la réflexion.
la source
La ligne suivante vous donnera un chemin d'application:
La solution ci-dessus fonctionne correctement dans les situations suivantes:
mkbundle
bundles de Mono (aucune autre méthode ne fonctionne)la source
J'utilise ceci si l'exe est censé être appelé en double-cliquant dessus
la source
j'ai utilisé
quand je veux trouver un chemin par rapport à un dossier d'applications. Cela fonctionne pour les applications ASP.Net et Winform. Il ne nécessite également aucune référence aux assemblys System.Web.
la source
Je veux dire, pourquoi ne pas utiliser la méthode ap / invoke?
Vous l'utiliseriez comme Application.StartupPath:
la source
Assembly.GetEntryAssembly().Location
ouAssembly.GetExecutingAssembly().Location
À utiliser en combinaison avec
System.IO.Path.GetDirectoryName()
pour obtenir uniquement le répertoire.Les chemins depuis
GetEntryAssembly()
etGetExecutingAssembly()
peuvent être différents, même si dans la plupart des cas le répertoire sera le même.Avec
GetEntryAssembly()
vous devez être conscient que cela peut retournernull
si le module d'entrée n'est pas géré (c'est-à-dire exécutable C ++ ou VB6). Dans ces cas, il est possible d'utiliser àGetModuleFileName
partir de l'API Win32:la source
dans VB.net
fonctionne pour moi (Type d'application: Bibliothèque de classes). Pas sûr de C # ... Renvoie le chemin sans nom de fichier sous forme de chaîne
la source
Résoudra le problème pour référencer les fichiers de référence tiers avec les packages d'installation.
la source
Aucune de ces méthodes ne fonctionne dans des cas particuliers comme l'utilisation d'un lien symbolique vers l'exe, elles renverront l'emplacement du lien et non l'exe réel.
Vous pouvez donc utiliser QueryFullProcessImageName pour contourner cela:
la source
Essayez cette simple ligne de code:
la source
Une autre solution consiste à utiliser des chemins relatifs pointant vers le chemin actuel:
la source
Je n'ai vu personne convertir le LocalPath fourni par la réflexion .Net Core en un chemin System.IO utilisable alors voici ma version.
Cela renverra le chemin d'accès complet au format "C: \ xxx \ xxx" à l'emplacement de votre code.
la source
Il existe de nombreuses façons d'obtenir un chemin exécutable, lequel nous devrions utiliser en fonction de nos besoins. Voici un lien qui décrit différentes méthodes.
Différentes façons d'obtenir le chemin exécutable de l'application
la source
Voici une solution fiable qui fonctionne avec des applications 32 bits et 64 bits .
Ajoutez ces références:
Ajoutez cette méthode à votre projet:
Maintenant, utilisez-le comme ceci:
Notez que si vous connaissez l'id du processus, cette méthode renverra le chemin ExecutePath correspondant.
Extra, pour ceux qui sont intéressés:
... vous donnera un tableau de tous les processus en cours d'exécution, et ...
... vous donnera le processus en cours, ainsi que leurs informations, par exemple Id, etc. et également un contrôle limité, par exemple Kill, etc. *
la source
Vous pouvez créer un nom de dossier en tant que ressources dans le projet à l'aide de l'Explorateur de solutions, puis vous pouvez coller un fichier dans les ressources.
la source