2012-10-19 20 views
7

Mam aplikację, muszę sprawdzić, czy .NET FW 3.5 już jest zainstalowany. Jeśli jest już zainstalowany, chcę otworzyć skrzynkę z komunikatami, która prosi użytkownika o pobranie jej ze strony Microsoftu i zatrzymanie instalacji..NET Framework jako warunek wstępny instalacji z Inno-Setup

Znalazłem następujący kod. Czy możesz mi powiedzieć proszę:

a) Skąd mam wywołać tę funkcję? b) Czy mogę sprawdzić, czy .NET FW 3.5 lub nowsza wersja jest już zainstalowana? na przykład Jeśli zainstalowany jest FW 4.0 - czy konieczne jest zainstalowanie 3.5?

Dziękuję

function IsDotNET35Detected(): Boolean; 
var 
    ErrorCode: Integer; 
    netFrameWorkInstalled : Boolean; 
    isInstalled: Cardinal; 
begin 
    result := true; 

    // Check for the .Net 3.5 framework 
    isInstalled := 0; 
    netFrameworkInstalled := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', isInstalled); 
    if ((netFrameworkInstalled) and (isInstalled <> 1)) then netFrameworkInstalled := false; 

    if netFrameworkInstalled = false then 
    begin 
    if (MsgBox(ExpandConstant('{cm:dotnetmissing}'), mbConfirmation, MB_YESNO) = idYes) then 
    begin 
     ShellExec('open', 
     'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en', 
     '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); 
    end; 
    result := false; 
    end; 

end; 

Odpowiedz

6

Jeśli chcesz wykonywać swój czek podczas uruchamiania instalacji, ale przed postać kreatora jest pokazany, użyj obsługi InitializeSetup zdarzeń dla niego. Kiedy zwrócisz False do tego handler'a, konfiguracja zostanie przerwana, gdy True uruchomi się. Oto trochę zoptymalizowany skrypt, który opublikowałeś:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[CustomMessages] 
DotNetMissing=.NET Framework 3.5 is missing. Do you want to download it ? Setup will now exit! 

[Code] 
function IsDotNET35Detected: Boolean; 
var 
    ErrorCode: Integer; 
    InstallValue: Cardinal; 
begin 
    Result := True; 
    if not RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 
    'Install', InstallValue) or (InstallValue <> 1) then 
    begin 
    Result := False; 
    if MsgBox(ExpandConstant('{cm:DotNetMissing}'), mbConfirmation, MB_YESNO) = IDYES then 
     ShellExec('', 'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en', 
     '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 
    end; 
end; 

function InitializeSetup: Boolean; 
begin 
    Result := IsDotNET35Detected; 
end; 
+0

Wiem, że nie odpowiedziałem na żadne z Twoich pytań. Niedługo wrócę z aktualizacją ... Ale muszę już iść ... – TLama

+0

Dziękuję. Spróbuję tego. A co z wersjami wyższymi (> 3.5)? Czy to prawda, że ​​jeśli zainstalowany jest FW 4.0, pokrywa on potrzeby 3.5? –

+0

To zależy od twojej aplikacji, jak to zostało powiedziane w ["tym artykule"] (http://msdn.microsoft.com/en-us/library/ff602939.aspx). Ale nikt wyraźnie nie powiedział, że jeśli zainstalujesz np. .NET 4.5 na komputerze bez zainstalowanego .NET Framework 3.5, że będziesz mógł zastosować ["ten rodzaj"] wykrywania (http://support.microsoft.com/kb/318785/en-us). – TLama

Powiązane problemy