2012-10-19 41 views
7

Tôi có một ứng dụng tôi phải kiểm tra xem .NET FW 3.5 đã được cài đặt chưa. Nếu đã được cài đặt, tôi muốn mở một hộp thư yêu cầu người dùng tải xuống từ trang web của Microsoft và ngừng cài đặt..NET Framework là điều kiện tiên quyết để cài đặt với Inno-Setup

Tôi đã tìm thấy mã sau. Bạn có thể cho tôi biết:

a) Tôi nên gọi hàm này từ đâu? b) Tôi có nên kiểm tra xem .NET FW 3.5 hoặc phiên bản cao hơn đã được cài đặt chưa? ví dụ. Nếu cài đặt FW 4.0 - có cần cài đặt 3,5 không?

Cảm ơn bạn

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; 

Trả lời

6

Nếu bạn muốn thực hiện kiểm tra của bạn khi quá trình cài đặt bắt đầu nhưng trước khi form wizard được hiển thị, sử dụng bộ xử lý InitializeSetup kiện cho nó. Khi bạn trả về False cho trình xử lý đó, quá trình thiết lập sẽ bị hủy, khi True, quá trình thiết lập sẽ bắt đầu. Dưới đây là một chút kịch bản được tối ưu hóa mà bạn đã đăng:

[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

Tôi biết tôi đã trả lời không có câu hỏi nào của bạn. Tôi sẽ quay trở lại với một bản cập nhật sớm ... Nhưng tôi phải đi ngay bây giờ ... – TLama

+0

Cảm ơn bạn. Tôi sẽ thử nó. Điều gì về các phiên bản cao hơn (> 3.5)? Điều đó có đúng không khi nói rằng nếu FW 4.0 được cài đặt, nó bao gồm các nhu cầu cho 3.5? –

+0

Nó phụ thuộc vào ứng dụng của bạn như được nói trong ['this article'] (http://msdn.microsoft.com/en-us/library/ff602939.aspx). Nhưng không ai nói rõ ràng rằng nếu bạn cài đặt, ví dụ: .NET 4.5 trên máy tính không có .NET Framework 3.5 được cài đặt, bạn sẽ có thể áp dụng [loại này'] (http://support.microsoft.com/kb/318785/en-us) của một phát hiện. – TLama

Các vấn đề liên quan