2009-08-26 14 views
5

Tengo un problema con mi instalador WiX.WiX: valor de propiedad perdido entre InstallUISequence e InstallExecuteSequence

Tengo un cuadro de diálogo personalizado que contiene un control de edición vinculado a una propiedad. En tiempo de ejecución, si cambio el valor en el control de edición, veo en el registro que la propiedad se actualiza correctamente con ese nuevo valor. Pero parece que, cuando termina el InstallUISequence, la propiedad se restablece a su valor predeterminado, lo cual es molesto, porque no puedo usar el valor que ha sido validado por el usuario en una parte de acción personalizada del InstallExecuteSequence.

He aquí un extracto de la escritura WXS que utilizo:

<UI> 
    <Dialog Id="select_list" Width="370" Height="270" Title="Select license and list files"> 
     <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="UIBannerBmp" /> 
     <Control Id="BannerLine" Type="Line" X="0" Y="45" Width="370" Height="0" /> 
     <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> 
     <Control Type="Edit" Id="list" Width="211" Height="15" X="128" Y="128" Property="pListFile" /> 
     <Control Type="Text" Id="static_list" Width="78" Height="17" X="41" Y="154" Text="list file" /> 
     <Control Type="PushButton" Id="next" Width="50" Height="17" X="232" Y="244" Text="Next &gt;"> 
      <Publish Event="EndDialog" Value="Return">1</Publish> 
     </Control> 
     <Control Type="PushButton" Id="cancel" Width="50" Height="17" X="296" Y="244" Text="Cancel"> 
      <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> 
     </Control> 
     <Control Type="Text" Id="desc" Width="348" Height="16" X="8" Y="90" 
       Text="Please set the path of the the list file" /> 
    </Dialog> 

    <InstallUISequence> 
     <Show Dialog="select_list" After="WelcomeEulaDlg">NOT installed</Show> 
    </InstallUISequence> 
</UI> 

<CustomAction Id="InstallService" 
       ExeCommand="[bin]prog.exe -f install.cl '[pListFile]'" 
       Execute="immediate" 
       Return="check" 
       Directory="bin" /> 

<InstallExecuteSequence> 
    <Custom Action="InstallService" After="InstallFinalize">REMOVE=""</Custom> 
</InstallExecuteSequence> 

<CustomActionRef Id="InstallService" /> 
<Property Id="pListFile" Value="c:\" /> 

no debo estar en el camino correcto para el intercambio de información entre las dos secuencias.

¿Hay alguna manera de hacerlo?

Respuesta

14

Debe marcar la propiedad "Seguro" para que pase desde el lado del cliente (InstallUISequence) al lado del servidor (InstallExecuteSequence). Para hacer eso, necesitas hacer que la propiedad sea "pública" (TODOS LOS MAYÚSCULAS) y segura. Algo así:

<Property Id="PLISTFILE" Secure="yes"/>

No es necesario darle un valor a menos que quiera algo que mostrar por en la interfaz de usuario por defecto.

Cuestiones relacionadas