2017-09-04 74 views
3

我是Inno Setup腳本的新手,我試圖使用下面的代碼安裝.NET Framework 3.5作爲先決條件。 Check函數正在執行多次。有人能幫我理解爲什麼嗎?在Inno Setup中執行多次「檢查」功能

注意:以下代碼中的所有其他部分(Setup,Icons等)都有適當的內容。

[Files] 
Source: "Frameworks\dotnetfx35setup.exe"; DestDir: {tmp}; Flags: deleteafterinstall; \ 
    BeforeInstall: Install35Framework; Check: Framework35IsNotInstalled 
[Code] 
function IsDotNetDetected(version: string; service: Cardinal): boolean; 
begin 
    Result := { ... }; 
end; 

function Framework35IsNotInstalled: Boolean; 
begin 
    if IsDotNetDetected('v3.5', 1) then 
    begin 
    MsgBox('Framework35IsNotInstalled: FALSE ', mbConfirmation, MB_YESNO); 
    Result := False; 
    end else begin 
    MsgBox('Framework35IsNotInstalled: TRUE ', mbConfirmation, MB_YESNO); 
    Result := True; 
    end; 
end; 

procedure Install35Framework; 
begin 
    { ... } 
end; 
+0

請檢查在谷歌日誌文件驅動器 https://drive.google.com/open?id=0B83yra4zBsMBbm1GcVVQbzYwVWc – NSR

+0

我添加了消息框來檢查函數執行的次數。正如我們在日誌文件中看到的,出現相同的消息框有多次。你能不能讓我知道這段代碼有什麼問題? – NSR

+0

對不起,我無法找到任何選項來編輯我的問題。 您能否幫助爲什麼Check方法執行多次? – NSR

回答

1

報價Check parameter documentation

安裝程序可能會調用每個檢查功能幾次,即使只有一個使用的檢查功能項。如果你的函數執行了一段冗長的代碼,你可以通過只執行一次代碼並將結果緩存到一個全局變量中來優化它。

所以行爲是按照設計。

而你的代碼很簡單,我甚至不認爲它需要任何優化。如果它運行幾次,它是完全沒問題的。


如果不是,您可以優化這樣的:

var 
    Framework35IsNotInstalledCalled: Boolean; 
    Framework35IsNotInstalledResult: Boolean; 

function Framework35IsNotInstalled: Boolean; 
begin 
    if not Framework35IsNotInstalledCalled then 
    begin 
    Framework35IsNotInstalledResult := IsDotNetDetected('v3.5', 1); 
    Framework35IsNotInstalledCalled := True; 
    end; 

    Result := Framework35IsNotInstalledResult; 
end; 
+0

謝謝你的回答和幫助。 – NSR