2009-09-22 21 views
8

posibles duplicados:
Getting the path of the current assembly
C#: How do I get the path of the assembly the code is in?Cómo obtener el nombre de archivo de .EXE

con VB 2008, ¿cómo puedo obtener el nombre de archivo de un .EXE que va desde el interior de sí mismo?

EDIT: Esto es para una aplicación de consola, por lo que Application.ExecutablePath no funcionará.

+3

Esto se ha hecho muchas veces antes de que el SO intentar usar la búsqueda. Aquí hay uno que encontré- http://stackoverflow.com/questions/864484/getting-the-path-of-the-current-assembly – RichardOD

+1

También: http://stackoverflow.com/questions/52797/c-how-do -i-get-the-path-of-the-assembly-the-code-is-in No es tan simple como ExecutablePath ya que algunos ensamblajes están cargados Click-Once –

+2

Busqué y no encontré nada. Ahora es obvio, pero estaba buscando .EXE no ensamblado. @RichardOD Trata de no ser un idiota. – aphoria

Respuesta

16

Hay algunas maneras:.

Application.ExecutablePath 

o

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

o

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

Ok, pero la aplicación está en System.Windows.Forms. ¿Es esta una aplicación WinForm? –

+0

Muchas gracias por agregar mi respuesta. –

+0

RRUZ, creo que Oplopanax tiene un buen punto sobre el uso de GetEntryAssembly en lugar de GetExecutingAssembly. Del mismo modo, CodeBase es una mejor opción que Location, ya que no incluye la ruta. –

1

Process.GetCurrentProcess() MainModule

edición

Otra forma podría ser usar Environment.GetCommandLineArgs() [0], pero prefiero usar Process.

+0

Steve debe ser Process.GetCurrentProcess(). MainModule.FileName – RRUZ

+2

Eso no es del todo correcto: puede elegir entre FileName o ModuleName. –

+0

ModuleName Obtiene el módulo principal para el proceso asociado. no el nombre del archivo – RRUZ

0

debería buscar que en la propiedad: Application.ExecutablePath

+0

No te recomendé, pero es posible que notes que RRUZ siempre te brindó una respuesta antes que tú. –

+0

Ah, pero había incluido un enlace a la documentación, por lo que mantuve mi respuesta (y también por qué me ganó unos segundos) –

+0

Bien, te recomendaré la neutralidad. –

4

Esto ha sido contestada before.

Desde cualquier lugar de su código, podría estar en un ensamblado que fue cargado por el EXE de origen. También es posible que no tenga una referencia a la aplicación Singleton, por lo que usar la clase Assembly es su mejor opción.

La forma más segura es Assembly.GetEntryAssembly(). La ubicación obtiene la ubicación en el sistema de archivos donde se encuentra actualmente el Ensamblaje. Si es shadow copied, esta es la ubicación de Copia de Sombra. Si se implementa click-once, esta es una ruta loca a un archivo en el área sandbox.

La ubicación original de la asamblea será en Assembly.GetEntryAssembly().Codebase

+0

En el caso de una implementación con un solo clic, ¿el método de proceso arrojará un resultado útil? –

+1

No estoy del todo seguro, pero creo que el método Process obtendrá el nombre del proceso de inicio de clickonce de la misma manera que para una aplicación web obtendría el proceso de trabajo de IIS. –

Cuestiones relacionadas