2013-02-22 14 views
6

Sto creando un'applicazione di configurazione WPF con un'interfaccia utente personalizzata. Ho iniziato con il tutorial di Bryan P. Johnston: http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application/WiX: come accedere/modificare la directory di installazione nel bootstrapper gestito?

Da qualche parte nel mio punto di vista, ho una semplice TextBox che si lega a una proprietà InstallationPath nel mio MainViewModel.

Ora desidero utilizzare questo percorso quando l'utente fa clic su "Installa". Per questo, ho un pulsante che si lega al mio InstallCommand. Il seguente metodo viene chiamato (presa direttamente dal tutorial):

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

Come posso fare i pacchetti da installare nella directory di mia proprietà InstallationPath?


Edit:

Ho trovato una domanda simile qui in StackOverflow:

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

La risposta c'è da Bob Arnson

Utilizzare un bambino MsiProperty per ogni MsiPackage per specificare INSTALLLOCATION = [BurnVariable]. Quindi utilizzare Engine.StringVariables per impostare BurnVariable.

Ora, credo che avrei potuto accedere al StringVariables nel mio InstallExecute come questo

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

Ma dove definire questa variabile? Immagino da qualche parte in Product.wxs?

+0

Hey Michael, ho seguito questo stesso tutorial e io sono di fronte un problema in cui durante importante aggiornamento, l'exe precedente non viene sempre rimosso come nuovo è installato fianco a fianco. Ho incrementato sia la versione EXE che le versioni MSI incluse. Ho visto altre persone che commentavano lo stesso problema sotto il tutorial. Hai incontrato questo problema? Se sì, come l'hai superato? :(Need some help man – mayooran

risposta

8

Sì basta creare una variabile nel bruciare programma di avvio automatico:

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

si può quindi passare questo come un parametro per il pacchetto msi boot-corto:

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

Grazie! Questo è esattamente quello che stavo cercando. :-) –

1

quella mancante proprietà "Type" sull'elemento Variabile del bundle. caverman_dick ha ragione ma non funziona correttamente quando non è sovrascrivibile. Puoi provare anche questo, impostando 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> 
Problemi correlati