2012-04-11 7 views
12

C'è un modo per verificare se .NET Framework 4 è stato installato e installarlo solo quando non è nel sistema?Come si installa .NET Framework solo quando non è già installato?

Lo so, come faccio a determinare se .NET Framework 4 è installato controllando la seguente chiave di registro?

hasDotnet4 := 
    RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0'); 

In che modo eseguo l'installazione .NET Framework 4 in modo condizionale in base al controllo precedente?

+1

possibile duplicato di [Im usando Inno Setup per rilevare se .net cliente 4.0 installato ma non funziona bene] (http : //stackoverflow.com/questions/9008905/im-using-inno-setup-to-detect-if-net-4-0-client-installed-but-it-doesnt-work-w) – Bernard

+0

No, questo è Unico, non ho trovato nessun thread con questa risposta –

risposta

27

Il modo più semplice che è possibile fare è utilizzare il parametro Check, che consente di controllare se verrà estratto un determinato file dalla sezione [Files] o se verrà eseguito un determinato programma dalla sezione [Run]. Il seguente codice di script mostra il suo utilizzo per l'installazione condizionale di .NET Framework 4:

[Files] 
Source: "dotNetFx40_Full_setup.exe"; DestDir: {tmp}; \ 
    Flags: deleteafterinstall; Check: FrameworkIsNotInstalled 

[Run] 
Filename: "{tmp}\dotNetFx40_Full_setup.exe"; Check: FrameworkIsNotInstalled 

[Code] 

function FrameworkIsNotInstalled: Boolean; 
begin 
    Result := 
    not RegKeyExists(
     HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0'); 
end; 
+1

Grazie, lo spero :) –

+4

Si potrebbe avere l'istruzione 'Controlla:' anche nella sezione '[Files]' direttamente per saltare anche il passo di estrazione. – gogowitsch

+0

Perché non con 'ExpandConstant ('{dotnet40}')' invece dell'accesso diretto al registro? – i486

Problemi correlati