2009-09-22 19 views
8

Possibili duplicati:
Getting the path of the current assembly
C#: How do I get the path of the assembly the code is in?Come ottenere il nome del file di .EXE

Usando VB 2008, come posso ottenere il nome del file di un .EXE che va dal suo interno?

MODIFICA: Questo è per un'applicazione console, quindi Application.ExecutablePath non funzionerà.

+3

Questo è stato chiesto molte volte prima su SO-provare a utilizzare la ricerca. Ecco uno che ho trovato- http://stackoverflow.com/questions/864484/getting-the-path-of-the-current-assembly – RichardOD

+1

Inoltre: http://stackoverflow.com/questions/52797/c-how-do -i-get-the-path-of-the-assembly-the-code-is-in Non è così semplice come ExecutablePath dato che alcuni assembly sono stati caricati Click-Once –

+2

Ho cercato e non ho trovato nulla. È ovvio ora, ma stavo cercando .EXE non assembly. @RichardOD Prova a non essere un idiota. – aphoria

risposta

16

Ci sono alcuni modi:.

Application.ExecutablePath 

o

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 

o

System.Reflection.Assembly.GetExecutingAssembly().Location 
+1

Ok, ma l'applicazione è in System.Windows.Forms. È un'app WinForm? –

+0

Grazie mille per aver aggiunto la mia risposta. –

+0

RRUZ, penso che Oplopanax abbia un buon punto sull'utilizzo di GetEntryAssembly anziché di GetExecutingAssembly. Allo stesso modo, CodeBase è una scelta migliore di Location, poiché non include anche il percorso. –

1

Process.GetCurrentProcess() MainModule

modificare

Un altro modo potrebbe essere utilizzare Environment.GetCommandLineArgs() [0], ma preferisco utilizzare Process.

+0

Steve deve essere Process.GetCurrentProcess(). MainModule.FileName – RRUZ

+2

Non è del tutto corretto: è possibile scegliere tra ottenere FileName o ModuleName. –

+0

ModuleName Ottiene il modulo principale per il processo associato. non il nome del file. – RRUZ

0

Si dovrebbe trovare nella proprietà: Application.ExecutablePath

+0

Non ti ho minimizzato, ma potresti notare che RRUZ ha fornito la risposta prima di te. –

+0

Ah, ma ho incluso un collegamento alla documentazione, motivo per cui ho tenuto la mia risposta (e anche perché mi ha battuto di pochi secondi) –

+0

Bene, ti farò invitare alla neutralità. –

4

Questo è stato risposto before.

Da qualsiasi punto del codice si potrebbe essere in un assembly che è stato caricato dal file EXE di origine. Inoltre potresti non avere un riferimento al singleton dell'applicazione, quindi utilizzare la classe Assembly è la soluzione migliore.

Il modo più sicuro è Assembly.GetEntryAssembly(). Posizione ottiene la posizione sul file system in cui è attualmente l'Assemblea. Se è shadow copied, questa è la posizione di copia shadow. Se è stato fatto clic su una volta, questo è un percorso pazzo per un file nell'area sandbox.

La posizione originale del gruppo sarà a Assembly.GetEntryAssembly().Codebase

+0

In caso di distribuzione click-once, il metodo Process restituirà un risultato utile? –

+1

Non ne sono del tutto sicuro, ma penso che il metodo Process otterrà il nome del processo clickonce launcher più o meno allo stesso modo di un'applicazione web che otterrebbe il processo di lavoro IIS. –

Problemi correlati