2011-09-08 14 views
6

Vorrei rilevare se esiste già una directory in un percorso di installazione personalizzato selezionato dall'utente nella GUI. Ho provato il seguente:Wix: come fare una DirectorySearch in un percorso di installazione personalizzato

<Property Id="DIRECTORY_PATH"> 
    <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" /> 
</Property> 

Ma questo non funziona perché DirectorySearch sta accadendo durante AppSearch. Mentre INSTALLDIR viene impostato in seguito durante InstallDirDlg. Poiché INSTALLDIR non è impostato in tempo per AppSearch, DIRECTORY_PATH è impostato erroneamente su "\ MyDirectory".

Ho provato a cambiare quando AppSearch si verifica con InstallUISequence e InstallExecuteSequence, ma lascerà AppSearch solo prima di CostInitialize, non più tardi.

Quindi, come faccio a cercare una directory nella posizione INSTALLDIR selezionata dall'utente?

risposta

3

Se devi solo attendere la scelta dell'utente per verificare quella directory, DirectorySearch non eseguirà il lavoro per te. Dovrai autorizzare un'azione personalizzata "imposta proprietà" subito dopo che l'utente sceglie INSTALLDIR, ad esempio, in un prossimo clic di InstallDirDlg.

AGGIORNAMENTO. Quindi, voglio dire in sostanza il seguente:

  • quando l'utente arriva al InstallDirDlg del setup, lui/lei sceglie la directory, che viene messa alla proprietà INSTALLDIR
  • finestra InstallDirDlg dovrebbe quindi innescare un personalizzato azione sul pulsante Next
  • questa azione personalizzata dovrebbe ottenere il valore della proprietà INSTALLDIR, e fare controllare un file system semplice se INSTALLDIR contiene MyDirectory
  • se lo fa, la proprietà percorso_directory è impostata al valore necessario, ad esempio, session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • altrimenti, percorso_directory non è impostato (e si può usare questo fatto in qualsiasi condizione controllando NOT DIRECTORY_PATH)

spero che lo rende più chiaro.

+0

La scelta dell'utente identifica solo il percorso di installazione, non se esiste una sottodirectory che sto cercando "MyDirectory" in quella posizione. Senza DirectorySearch, come fa l'installatore a sapere se deve impostare la proprietà? – Michael

+0

Dovrai simulare la ricerca della directory da solo. Finché il vero DirectorySearch avviene durante AppSearch, non soddisfa le tue esigenze. Ecco perché ho citato l'azione "imposta proprietà" - non dovrebbe solo impostare una proprietà, ma fare qualche logica per scoprire se la sottodirectory esiste. –

+0

Ho pensato che il commento sopra possa sembrare confuso :) Aggiornerò la mia risposta –

0

Spero che questo ti possa aiutare.

Se nel registro è stato memorizzato il file INSTALLDIR della precedente installazione, è possibile ottenerlo e cercarlo. Nella sequenza UI di installazione, il percorso di installazione punta alla posizione precedente.

<!-- Set previous install location, if available --> 
<Property Id="INSTALLDIR" Secure="yes"> 
    <RegistrySearch Id="InstallRootRegistry" 
        Type="raw" 
        Root="HKLM" 
        Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
        Name="INSTALLDIR" /> 
</Property> 

<!-- The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default --> 
<Property Id="WIXUI_INSTALLDIR" 
      Value="INSTALLDIR" Secure="yes"/> 
Problemi correlati