2013-02-22 21 views
6

Tworzę aplikację do konfiguracji WPF z niestandardowym interfejsem użytkownika. Zacząłem z samouczka Bryan P. Johnston: http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application/WiX: jak uzyskać dostęp/zmienić katalog instalacyjny w zarządzanym bootstrapperie?

Gdzieś w moim zdaniem, mam proste TextBox który wiąże się właściwość InstallationPath w moim MainViewModel.

Teraz chcę, aby ta ścieżka była używana, gdy użytkownik kliknie "Zainstaluj". W tym celu mam przycisk, który wiąże się z moim InstallCommand. Poniższa metoda jest wywoływana (zaczerpnięte bezpośrednio z samouczka):

private void InstallExecute() 
{ 
    Bootstrapper.Engine.Plan(LaunchAction.Install); 
} 

Jak mogę dokonać pakiety do zainstalowania w katalogu mojej własności InstallationPath?


Edit:

Znalazłem podobne pytanie tutaj na Stackoverflow:

Specify the INSTALLLOCATION of packages in WiX inside the Burn managed bootstrapper

Odpowiedź jest z Bobem Arnson

Użyj dziecko MsiProperty dla każdego MsiPackage, aby określić INSTALLLOCATION = [BurnVariable]. Następnie użyj Engine.StringVariables, aby ustawić BurnVariable.

Teraz, myślę, że mogę wejść do StringVariables w moim InstallExecute jak ten

private void InstallExecute() 
{ 
    Bootstrapper.Engine.StringVariables["BurnVariable"] = InstallationPath; 
    Bootstrapper.Engine.Plan(LaunchAction.Install); 
} 

ale gdzie do zdefiniowania tej zmiennej? Zgaduję, gdzieś w Product.wxs?

+0

Hej Michael, a następnie ten sam kurs i jestem w obliczu problemu, gdzie podczas poważnej aktualizacji, poprzednia exe nie jest uzyskiwanie usunięte jako nowy jeden jest zainstalowana obok siebie. Zwiększyłem zarówno wersję EXE, jak i dołączone wersje MSI. Widziałem, jak inne osoby komentowały ten sam problem poniżej samouczka. Czy napotkasz ten problem? Jeśli tak, to jak się z tym pogodziłeś? :(Potrzebujesz pomocy man – mayooran

Odpowiedz

8

Tak po prostu utworzyć zmienną w swoim nagrywania inicjującego:

<Variable Name="BurnVariable" 
      bal:Overridable="yes" /> 

można następnie przekazać to jako parametr do boot-przywiązany Pakiet MSI:

<MsiPackage SourceFile="$(var.YourMsiProject.Installer.TargetPath)" Compressed="no"> 
    <MsiProperty Name="INSTALLLOCATION" Value="[BurnVariable]" />   
</MsiPackage> 
+0

Dzięki! Dokładnie tego szukałem. :-) –

1

One brakującej własności "typ" na zmiennym pakiecie. caverman_dick ma rację, ale to nie działa poprawnie, gdy nie można go zastąpić. Możesz też spróbować, ustawiając Type = "string".

Wix Variable Element

<Wix>...<Bundle>... 
    <Variable Name="MyApplicationMsiInstallFolder" Value="[WindowsVolume]MyApplication" 
      bal:Overridable="yes" Type="string"/> 
    <Chain> 
     <?if $(var.DbVersion) = false?> 
     <PackageGroupRef Id="AccessDatabaseGroup"/> 
     <RollbackBoundary /> 
     <?endif?> 
     <MsiPackage Id="MyApplicationMsiPackage" SourceFile="$(var.MyApplicationSetup.TargetPath)" DisplayInternalUI="no" 
           Vital="yes" > 
      <MsiProperty Name="APPLICATIONFOLDER" Value="[MyApplicationMsiInstallFolder]"/> 
     </MsiPackage> 
    </Chain> 
</Bundle></Wix> 
Powiązane problemy