2012-10-19 22 views
7

.NET FW 3.5'in kurulu olup olmadığını kontrol etmem gereken bir uygulama var. Zaten yüklenmişse, kullanıcının Microsoft web sitesinden indirmesini ve yüklemeyi durdurmasını isteyen bir mesaj kutusu açmak istiyorum.Inno-Setup ile kurulum için bir ön koşul olarak .NET Framework

Aşağıdaki kodu buldum. Bana söyler misiniz?

a) Bu işlevi nereden aramalıyım? b) .NET FW 3.5 veya daha yüksek bir sürüm zaten yüklü olup olmadığını kontrol etmeli miyim? Örneğin. FW 4.0 yüklü ise - 3.5 yüklemek için gerekli mi? Eğer sihirbaz formu gösterilmektedir önce kurulum başlar ama, bunun için InitializeSetup olay işleyicisi kullandığınızda kontrolü gerçekleştirmek istiyorsanız

sizi

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; 

cevap

6

ederiz. False'u bu işleyiciye geri döndürdüğünüzde, True, kurulum başlatıldığında kurulum iptal edilir. İşte yayınladığınız biraz optimize edilmiş komut dosyası:

[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

Hiçbir sorunuza cevap vermediğimi biliyorum. Yakında bir güncelleme ile geri geleceğim ... Ama şimdi gitmeliyim ... – TLama

+0

Teşekkür ederim. Deneyeceğim. Daha yüksek (> 3.5) sürümleri nedir? Eğer FW 4.0 kurulu ise 3.5 için ihtiyacı karşıladığını söylemek doğru mu? –

+0

['Bu makale'] 'de anlatıldığı gibi uygulamanıza bağlıdır (http://msdn.microsoft.com/en-us/library/ff602939.aspx). Ama kimse açıkça söylesin, eğer ör. .NET Framework 3.5 yüklü olmayan bir bilgisayarda .NET 4.5, bir algılamanın ['bu tür '] (http://support.microsoft.com/kb/318785/en-us) uygulayabileceksiniz. – TLama

İlgili konular