2010-04-07 13 views
13

Ho bisogno di ottenere il percorso (non eseguibile), dove la mia applicazione è in esecuzione da:Directory eseguibile da cui è in esecuzione l'applicazione?

System.AppDomain.CurrentDomain.BaseDirectory() 

Quando eseguo la dichiarazione di cui sopra con & "/images/image.jpg" sulla mia macchina locale funziona benissimo ma quando installo l'applicazione su un'altra macchina, dice che non riesce a trovare il file e ci sono molte altre informazioni sul percorso.

Ho solo bisogno della directory in cui è in esecuzione l'app. Sto codificando in VB.NET con Visual Studio 2008.

Grazie!

+0

non so molto di vs 2008 ma quando si fa un dirinfo non si ottiene il dirinfo da dove l'app. sta correndo? – Grumpy

+0

Possibile duplicato di [Ottieni percorso programmi?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

risposta

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

Tratto da HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath contiene ** file **: \\ c: \\ xxxxxx – Kraken101

+0

Questo non è sicuro, ad esempio quando viene utilizzato per aprire il file di configurazione causa 'System.Configuration.ConfigurationErrorsException: Si è verificato un errore durante il caricamento di un file di configurazione: I formati URI non sono supportati' –

+0

La risposta di MrCalvin sta funzionando bene in questo caso –

0

È possibile scrivere il seguente:

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

Ci sono delle insidie ​​in questo approccio poiché l'assembly non risiede necessariamente nella stessa directory dell'esecuzione montaggio. –

4

È possibile utilizzare il StartupPath proprietà statica della classe Application.

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

Questo è il primo post su google quindi ho pensato di postare diversi modi che sono disponibili e come si confrontano. Sfortunatamente non riesco a capire come creare un tavolo qui, quindi è un'immagine. Il codice per ciascuno è sotto l'immagine usando nomi completi.

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

avevo bisogno di sapere questo e sono venuto qui, prima che mi sono ricordato della classe Environment.

Nel caso in cui qualcun altro avesse questo problema, basta usare questo: Environment.CurrentDirectory.

Esempio:

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

quando viene eseguito da Visual Studio in yeilds modalità di debug:

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

Questo è l'esatto comportamento di cui avevo bisogno, e la sua semplice e lineare abbastanza.

+1

La soluzione più piccola e semplice, con la formattazione! +1, grazie. – rdtsc

+0

Sì, questo aiuta a rendere l'applicazione veramente portatile, mantenendo il file delle impostazioni nel percorso principale dell'applicazione. Grazie per la soluzione semplice! –