none
Obtener la ruta donde se ha instalado un aplicativo windows form RRS feed

  • Pregunta

  • Estimados de antemano gracias por su ayuda!

    Estoy buscando la forma de obtener la carpeta desde donde ejecuto una App windows form, mi objetivo es actualizar nuevas versiones directamente desde el App... en concreto cuando trato de instalar una actualización (y el usuario no se "acuerda" en que carpeta tiene instada la aplicación, salta el siguiente mensaje: "No se puede iniciar la aplicación en esta ubicación porque ya esta instalada desde otra ubicación"

    Al hacer clic en "Detalles", en una de las líneas del texto dice:

    "+ No puede iniciar la aplicación SYS_PAP desde la ubicación file:///C:/Users/C14725/Desktop/PAP/SYS_PAP.application porque ya está instalada desde la ubicación file:///C:/Users/C14725/Desktop/Publicar/SYS_PAP.application."


    Justamente la ruta que requiero identificar en mi aplicación es la segunda, he probado con todos estos métodos, entre otros que no recuerdo, y ninguno me ha resultado:

    MsgBox(My.Application.Info.DirectoryPath())
    MsgBox(System.Windows.Forms.Application.ExecutablePath.ToString())
    MsgBox(System.IO.Directory.GetCurrentDirectory())  
    MsgBox(System.Reflection.Assembly.GetExecutingAssembly().Location)

    Muchas gracias y ojalá alguien pueda darme una mano

    • Cambiado Enrique M. Montejo miércoles, 25 de abril de 2018 6:15 Pregunta relacionada con aplicación de Windows Forms.
    viernes, 13 de abril de 2018 14:57

Todas las respuestas

  • La del GetCurrentDirectory no es buena porque el directorio "current" no tiene por qué ser el mismo en el que está instalada la aplicación.

    Pero Assembly.GetExecutingAssembly().Location tiene que funcionar con seguridad, lo he usado un monton de veces. Y Application.ExecutablePath también funciona con toda seguridad si lo llamas desde un ejecutable de Winforms.

    Si estas dos no te están funcionando, tiene que estar interviniendo algún otro factor que no es obvio a partir de tu pregunta. Puedo asegurar que si llamas a Assembly.GetExecutingAssembly().Location desde un ensamblado de .Net te devuelve con toda seguridad la ubicación de dicho ensamblado.

    viernes, 13 de abril de 2018 16:22
  • Muchas gracias por tu respuesta, sin embargo no me funciona.

    Tengo instalada mi aplicación (lo ejecuto desde) C:/Users/C14725/Desktop/Publicar/

    Y esto se muestra con lo que indicas:

    Assembly.GetExecutingAssembly().Location

    Ejecutando desde el proyecto:
    D:\Desarrollo\SYS_PAP\SYS_PAP\bin\Debug\SYS_PAP.exe

    Ejecutando desde el compilado:

    C:\Users\C14725\AppData\Local\Apps\2.0\QXJG0TDR.VCK\N2YK2CMG.XEO\sys_..tion_0000000000000000_0001.0000_3e739ad7cd906043\SYS_PAP.exe

    Y para Application.ExecutablePath desde el compilado:

    C:\Users\C14725\AppData\Local\Apps\2.0\QXJG0TDR.VCK\N2YK2CMG.XEO\sys_..tion_0000000000000000_0001.0000_2fab7e7d63bc8683\SYS_PAP.exe

    Gracias y ojala me puedan echar una mano

    lunes, 16 de abril de 2018 14:53
  • Con esa ruta, tiene todo el aspecto de que estás desplegando la aplicación mediante ClickOnce. Si es así, la ruta es correcta. Ese es el sitio donde click-once inatala el ejecutable, y desde ahí es desde donde se está ejecutando. Fíjate que aunque en tu equipo de desarrollo también tenga otra copia en otro sitio, cuando lo despliegues por click-once en un equipo de usuario, esa será la única ruta donde la aplicación exista en ese equipo.
    lunes, 16 de abril de 2018 15:02
  • Gracias por tu respuesta, lo que hago es ir a la opción "Compilar" y luego "Publicar mi App", y como indicas puede que la carpeta que muestra Assembly.GetExecutingAssembly().Location es la de instalación del aplicativo

    Sin embargo cuando publico una nueva versión y la ejecuto en una carpeta diferente de la que fue "instalada" la primera vez me muestra el error:

    No puede iniciar la aplicación SYS_PAP desde la ubicación file:///C:/Users/C14725/Desktop/PAP/SYS_PAP.application porque ya está instalada desde la ubicación file:///C:/Users/C14725/Desktop/Publicar/SYS_PAP.application."

    Lo que busco es el comando que me devuelva la segunda ubicación del mensaje de error, que como se ve, de algún modo el aplicativo lo está identificando

    Muchas gracias!

    lunes, 16 de abril de 2018 20:08
  • Por favor alguien me da una mano.... gracias
    viernes, 20 de abril de 2018 20:15
  • Por si a alguien le sirve:

    Dim sPath AsString= ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString()

    Previamente:

    Imports

    System.Deployment.Application


    Imports

    System.ComponentModel

    :)

    lunes, 30 de abril de 2018 15:21