2012-10-18 13 views
9

Ho bisogno del mio programma di installazione per controllare se esiste un file nel percorso di destinazione, e se non c'è, l'installazione si interrompe. Il mio progetto è una patch di aggiornamento, quindi voglio che il programma di installazione eviti di installare i file di aggiornamento se l'exe principale dell'applicazione non è nella destinazione. Come posso fare questo?Inno Setup - Controlla se il file esiste nella destinazione o se non interrompe l'installazione

Qualcuno può fornire un esempio di codice per verificare la versione del file tramite il registro di Windows?

+1

Normalmente, per gli installatori di aggiornamento, è sufficiente utilizzare lo stesso AppID e Inno gestirà il resto per voi. Vedi [questo articolo] (http://www.vincenzo.net/isxkb/index.php?title=Upgrades) per maggiori dettagli. – Deanna

risposta

10

Semplicemente non lasciare che l'utente continui finché non sceglie la cartella corretta.

function NextButtonClick(PageId: Integer): Boolean; 
begin 
    Result := True; 
    if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\yourapp.exe')) then begin 
     MsgBox('YourApp does not seem to be installed in that folder. Please select the correct folder.', mbError, MB_OK); 
     Result := False; 
     exit; 
    end; 
end; 

Naturalmente, è anche una buona idea provare a selezionare automaticamente la cartella corretta per loro, ad es. recuperando la posizione corretta dal registro.

+0

Questo funziona perfettamente per me ... grazie! – Dielo

+0

Quindi dovresti ['accettare la risposta'] (http://meta.stackexchange.com/a/5235/179541). Ad ogni modo, hai detto che vuoi interrompere l'installazione nella tua domanda. Bene, non importa ... – TLama

+0

Questo è effettivamente un abort. Per un'installazione interattiva, non offre all'utente alcuna opzione se non quella di correggere il percorso o annullare. Per un'installazione non interattiva (silenziosa), verrà semplicemente interrotta. (Anche se su questa nota, se ti aspetti installazioni invisibili dovresti usare 'SuppressibleMsgBox'.) – Miral

3

Un'altra soluzione sarebbe la InitializeSetup():

credito: Manfred

[code] 
    function InitializeSetup(): Boolean; 
    begin 
    if (FileExists(ExpandConstant('{pf}\{#MyAppName}\somefile.exe'))) then 
    begin 
     MsgBox('Installation validated', mbInformation, MB_OK); 
     Result := True; 
    end 
    else 
    begin 
     MsgBox('Abort installation', mbCriticalError, MB_OK); 
     Result := False; 
    end; 
    end; 
Problemi correlati