13

J'ai besoin pour obtenir le chemin (non exécutable) où ma demande est en cours d'exécution à partir de:Répertoire exécutable d'où provient l'application?

System.AppDomain.CurrentDomain.BaseDirectory() 

Quand je lance la déclaration ci-dessus avec & « /images/image.jpg » sur ma machine locale, il fonctionne très bien mais quand j'installe l'application sur une autre machine, elle dit qu'elle ne trouve pas le fichier et qu'il y a beaucoup d'informations supplémentaires sur le chemin. J'ai juste besoin du répertoire où l'application est en cours d'exécution. Je code dans VB.NET avec Visual Studio 2008.

Merci!

+0

ne sais pas beaucoup de choses sur vs 2008 mais quand vous faites un dirinfo ne vous obtenez le dirinfo d'où l'application. est en cours d'exécution? – Grumpy

+0

Copie possible de [Obtenir le chemin d'accès aux programmes?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

Répondre

26
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

Taken de HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath contient ** fichier **: \\ c: \\ xxxxxx – Kraken101

+0

Ce n'est pas sûr, par exemple quand il est utilisé pour ouvrir le fichier de configuration, il provoque 'System.Configuration.ConfigurationErrorsException: Une erreur s'est produite lors du chargement d'un fichier de configuration: Les formats d'URI ne sont pas supportés » –

+0

La réponse de MrCalvin fonctionne bien dans ce cas –

0

Vous pouvez écrire:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg") 
+1

Il existe des pièges à cette approche car l'assembly ne réside pas nécessairement dans le même répertoire que l'exécutable. Assemblée. –

4

Vous pouvez utiliser la propriété StartupPath statique de la classe d'application.

12
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
P = New Uri(P).LocalPath 
20

Ceci est le premier post sur google alors j'ai pensé que je posterais différentes façons qui sont disponibles et comment ils se comparent. Malheureusement, je n'arrive pas à comprendre comment créer une table ici, donc c'est une image. Le code pour chacun est sous l'image en utilisant des noms complets.

enter image description here

My.Application.Info.DirectoryPath 

Environment.CurrentDirectory 

System.Windows.Forms.Application.StartupPath 

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly.Location 

System.Reflection.Assembly.GetExecutingAssembly.CodeBase 

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase) 

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))) 

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)) 
6

je devais savoir et est venu ici, avant que je me suis souvenu de la classe environnement.

Si quelqu'un d'autre avait ce problème, utilisez simplement ceci: Environment.CurrentDirectory.

Exemple:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory) 

Lorsqu'il est exécuté à partir de Visual Studio en mode débogage yeilds:

C:\Development\solution folder\application folder\bin\debug 

Ce comportement est exact que je avais besoin, et son assez simple et directe.

+1

La solution la plus simple et la plus simple, avec formatage! +1, merci. – rdtsc

+0

Oui, cette aide pour rendre l'application vraiment portable, en conservant le fichier de paramètres dans le chemin racine de l'application. Merci pour la solution simple! –

Questions connexes