2010-10-13 11 views
11

Im wdrażanie aplikacji i podczas instalacji po wybraniu przez użytkownika miejsca instalacji aplikacji Chcę uzyskać tę ścieżkę, jestem już w akcji niestandardowej, ale nie wiem, jak uzyskać ścieżkę do aplikacji zostanie zainstalowany!Ścieżka dostępu do aplikacji podczas instalacji

jego Windows Forms i im rozwijających za pomocą Visual Studio 2010 "C#".

i im przy użyciu domyślnego wdrażana narzędzie ...

jakiś pomysł?

z góry dzięki ...

+0

Na podstawie "akcji niestandardowej" zgaduję, że używasz Instalatora Windows. Czy korzystasz z Wix lub projektu instalacji Visual Studio? –

+0

oh im sorry przepraszam zapomniałem podać więcej informacji będę edytować moje pytanie ... – Stacker

Odpowiedz

32

klasy niestandardowe działanie jest powinny dziedziczyć System.Configuration.Installer.Installer. Ma na niej parametr o nazwie Kontekst, który ma słownik Parametry. Słownik zawiera wiele użytecznych zmiennych dotyczących instalacji i możesz dodać niektóre.

Po dodaniu niestandardowego instalatora do projektu instalacji w okienku Niestandardowe akcje. Wybierz działanie zainstalować i ustawić właściwość CustomActionData do:

/targetdir="[TARGETDIR]\" 

Następnie można uzyskać dostęp do ścieżki tak:

[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

to doesnt pracy :( – Stacker

+0

Moja zła.Musisz również ustawić właściwość CustomActionData Post zaktualizowany –

+0

Jak korzystać z TARGETDIR w visual C++? – karikari

1

wiem, że to VB ale ten pracował dla mnie.

+0

Wygląda na to, że nie odpowiada na pytanie. –

0

Przykro mi, aby opublikować odpowiedź na stary post, ale moja odpowiedź może pomóc innym.

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); 
    } 
} 
Powiązane problemy