2010-10-13 8 views
11

nella distribuzione di un'applicazione e durante l'installazione dopo che l'utente ha scelto dove installare l'app voglio ottenere quel percorso, im in un'azione personalizzata già ma non so come ottenere il percorso dell'applicazione dove sta per essere installato!Ottenere il percorso dell'applicazione durante l'installazione

Windows Form e in sviluppo con Visual Studio 2010 "C#".

e im utilizzando il default strumento di distribuzione di ...

qualche idea?

grazie in anticipo ...

+0

In base a "azione personalizzata", suppongo che tu stia utilizzando Windows Installer. Stai usando Wix o un progetto di installazione di Visual Studio? –

+0

oh mi spiace ho dimenticato di fornire ulteriori informazioni modifico la mia domanda ... – Stacker

risposta

32

La classe l'azione personalizzata è in dovrebbe ereditare da System.Configuration.Installer.Installer. Questo ha un parametro chiamato Contesto che ha un dizionario Parametri. Il dizionario contiene un numero di variabili utili sull'installazione ed è possibile aggiungerne alcune.

Dopo aver aggiunto il programma di installazione personalizzato al progetto di installazione nel riquadro Azioni personalizzate. Selezionare l'azione Installare e impostare la proprietà CustomActionData:

/targetdir="[TARGETDIR]\" 

Poi si può accedere al percorso in questo modo:

[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

questo non funziona :( – Stacker

+0

Il mio male.È inoltre necessario impostare la proprietà CustomActionData.Post aggiornato. –

+0

Come utilizzare TARGETDIR in visual C++? – karikari

1

Lo so che è VB, ma tutto ha funzionato per me.

+0

Sembra che non risponda alla domanda. –

0

Mi spiace postare la risposta per il vecchio post ma la mia risposta potrebbe aiutare gli altri.

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); 
    } 
} 
Problemi correlati