2009-11-27 8 views
10

Ho già bloccare l'installazione del nostro software sui sistemi operativi in ​​cui è noto non lavorare in questo modo:Come visualizzare un avviso non bloccante per il sistema operativo in Wix?

<Condition Message="This software needs Windows XP or newer."> 
    <![CDATA[VersionNT >= 501]]> 
</Condition> 

ora vorrei anche visualizzazione non-blocking avvertimento se l'utente tenta di installare il software su un sistema operativo (VersionNT + Service Pack) non supportato esplicitamente, anche se è .

Ad esempio, supportiamo solo in modo esplicito l'ultimo service pack di ciascun sistema operativo.

Come posso visualizzare questo avviso?

risposta

16

Ho affrontato questo problema in 3 parti:

  1. definire una proprietà OSWarningText che viene impostato quando un avvertimento deve essere somministrato solo
  2. authoring una schermata di avviso personalizzato
  3. Inserimento l'avviso personalizzato schermo nella sequenza UI, se necessario

1. Definizione di un puntello OSWarningText erty

Innanzitutto, dichiarare la proprietà e dare il valore "disinserito" di default:

<Property Id="OSWarningText" Value="{}"/> 

per costruire il valore effettivo della proprietà, impostare una proprietà intermediario per ogni possibile avvisi. Assicurarsi che le condizioni per ogni avvertimento non si sovrappongono:

<SetProperty Id="OSWarningText1" After="AppSearch" 
    Value="Detected XP SP [ServicePackLevel]. SP3 or higher is recommended."> 
    <![CDATA[(VersionNT = 501) AND NOT (ServicePackLevel >= 3)]]> 
    </SetProperty> 

    <SetProperty Id="OSWarningText2" After="SetOSWarningText1" 
    Value="Detected Vista SP [ServicePackLevel]. SP2 or higher is recommended."> 
    <![CDATA[(VersionNT = 600) AND NOT (ServicePackLevel >= 2)]]> 
    </SetProperty> 

Assumendo che le condizioni non si sovrappongano, siamo in grado di condensare in modo sicuro le avvertenze in una singola proprietà come questa:

<SetProperty Id="OSWarningText" After="SetOSWarningText2" 
    Value="[OSWarningText1][OSWarningText2]" />  

2. Creazione una schermata di avviso personalizzata.

Questo è simile allo example for adding a checkbox for the desktop shortcut. Copia una delle definizioni di dialogo esistenti da wix sources, ad es. InstallDirDlg.wxs e rinominarlo in WarningDlg.wxs.

Impostare l'ID della finestra di dialogo su Id="WarningDlg. Striscia i controlli inutili e li sostituisce con un'immagine di avvertimento e la nostra OSWarningText definito in precedenza:

<Control Id="OSWarning" Type="Text" X="100" Y="80" Width="250" Height="60" 
    NoPrefix="yes" Text="[OSWarningText]" /> 

<Control Id="WarningIcon" Type="Icon" X="20" Y="60" Width="64" Height="64" 
    Text="Warning.ico" > 
    <Binary Id="Warning.ico" SourceFile="..\icons\warning.ico"/> 
</Control> 

L'idea è quella di creare qualcosa di simile:

3. Inserimento l'avviso personalizzato schermata nella sequenza dell'interfaccia utente

Ora è necessario assicurarsi che la schermata di avviso sia visualizzata tra la finestra di dialogo di benvenuto e la finestra di dialogo del contratto di licenza, ma solo se effettivamente c'è un avvertimento da mostrare.Questo è un caso speciale del più generale problema branching wizard sequences.

Anche in questo caso, copiare una sequenza UI predefinita dalle origini wix, ad es. WixUI_InstallDir.wxs e rinominare l'ID UI su Id="MyWixUI". Fai riferimento a questo nel tuo file wxs principale come <UIRef Id="MyWixUI" />. Ora trova e modifica i gestori di eventi per il pulsante Avanti di WelcomeDlg.

È possibile impostare le proprietà in risposta a una pressione di un pulsante e una condizione aggiuntiva, e è possibile visualizzare la finestra di dialogo successiva in base a una proprietà. Faremo uso di tale per gestire il pulsante accanto WelcomeDlg come questo:

  1. reimpostare la proprietà WelcomeDlg_Next a "unset"
  2. impostare la proprietà WelcomeDlg_Next a "WarningDlg", ma solo se OSWarningText è impostato
  3. imposta la proprietà WelcomeDlg_Next su "LicenseAgreementDlg" ma solo se OSWarningText NON è impostato.
  4. Mostra la finestra di dialogo fornita da WelcomeDlg_Next, se la proprietà era impostata correttamente.

Il codice Wix fare che assomiglia a questo:

 <Publish Dialog="WelcomeDlg" Control="Next" 
      Property="WelcomeDlg_Next" Value="{}" 
      Order="1">1</Publish> 
     <Publish Dialog="WelcomeDlg" Control="Next" 
      Property="WelcomeDlg_Next" Value="WarningDlg" 
      Order="2">OSWarningText</Publish> 
     <Publish Dialog="WelcomeDlg" Control="Next" 
      Property="WelcomeDlg_Next" Value="LicenseAgreementDlg" 
      Order="3">NOT OSWarningText</Publish> 
     <Publish Dialog="WelcomeDlg" Control="Next" 
      Event="NewDialog" Value="[WelcomeDlg_Next]" 
      Order="4">WelcomeDlg_Next</Publish> 

Poi fare l'equivalente per il contratto di licenza pulsante "indietro": dovrebbe tornare alla schermata di benvenuto se non v'è alcun avviso, oppure alla schermata di avviso.

Problemi correlati