2010-10-13 26 views
11

im implementando una aplicación y durante la instalación después de que el usuario elija dónde instalar la aplicación quiero obtener esa ruta, ya estoy en una acción personalizada pero no sé cómo obtener la ruta de la aplicación donde va a ser instalado!Obteniendo la ruta de la aplicación durante la instalación

sus Windows Forms y estoy desarrollando usando Visual Studio 2010 "C#".

y estoy usando la herramienta de despliegue predeterminado ...

alguna idea?

gracias de antemano ...

+0

Según "acción personalizada", supongo que está utilizando Windows Installer. ¿Estás usando Wix o un proyecto de instalación de Visual Studio? –

+0

oh lo siento me olvidé de proporcionar más información voy a editar mi pregunta ... – Stacker

Respuesta

32

la clase de su acción personalizada está en debe heredar de System.Configuration.Installer.Installer. Esto tiene un parámetro llamado Contexto que tiene un diccionario de Parámetros. El diccionario contiene una cantidad de variables útiles sobre la instalación y puede agregar algunas.

Una vez que haya agregado el instalador personalizado a su proyecto de instalación en el panel Acciones personalizadas. Seleccione la acción Instalar y configurar la propiedad CustomActionData a:

/targetdir="[TARGETDIR]\" 

A continuación, puede acceder a la ruta de esta manera:

[RunInstaller(true)] 
public partial class CustomInstaller : System.Configuration.Install.Installer 
{ 
    public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 
     string path = this.Context.Parameters["targetdir"]; 
     // Do something with path. 
    } 
} 
+1

esto no funciona :( – Stacker

+0

Mi malo. También es necesario configurar la propiedad CustomActionData. Post updated. –

+0

¿Cómo utilizar TARGETDIR en Visual C++? – karikari

1

Sé que es VB pero esto funcionó para mí.

Private Sub DBInstaller_AfterInstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles Me.AfterInstall 

    MessageBox.Show(Context.Parameters("assemblypath")) 

End Sub 
+0

Parece que no responde la pregunta. –

0

Lamento publicar una respuesta para una publicación anterior, pero mi respuesta puede ayudar a otra.

public override void Install(System.Collections.IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
    if (rkApp.GetValue("MyApp") == null) 
    { 
     rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]); 
    } 
    else 
    { 
     if (rkApp.GetValue("MyApp").ToString() != this.Context.Parameters["assemblypath"]) 
     { 
      rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]); 
     } 
    } 
} 

public override void Uninstall(System.Collections.IDictionary savedState) 
{ 
    base.Uninstall(savedState); 
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

    if (rkApp.GetValue("MyApp") != null) 
    { 
     rkApp.DeleteValue("MyApp", false); 
    } 
} 
Cuestiones relacionadas