2016-07-10 28 views
1

我知道已經有問題Execute different command in Inno Setup Run section based on Windows version有很好的答案。根據Windows版本在Inno Setup Run部分執行不同的BLOCK命令

我的問題是如何針對不同的目標Windows版本執行不同的命令塊。我的問題是,如果目標版本是Windows 7,並且Windows 8或更高版本的相同數量的不同命令,我有10-15個需要執行的命令。

是否有可能避免在每個命令需要第一種情況後需要添加; OnlyBelowVersion: 6.2而在第二個塊中的每個命令之後需要; MinVersion: 6.2

我知道有預處理條件"#if"#else#endif但當然只能在編譯時

編輯。 問題和答案Determine Windows version in Inno Setup雖然可能看起來類似於這個問題不回答它。我知道如何確定Inno Setup中的Windows版本。我也知道那些; MinVersion: 6.2; OnlyBelowVersion: 6.2選項。我詢問是否可以指定一個命令塊(10-15個命令)並將該選項應用於整個塊,而不是單獨應用於每個命令。

編輯2 的目的不是爲了避免「神祕版本號」但要避免重複相同條件下多次。並且爲了避免塊隨時間增長而忘記的風險。

,我發現迄今是使用CurStepChanged過程中的解決方案:

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
     if IsWindows8OrLater() then 
     MsgBox('Running on Windows 8 Or Later', mbInformation, MB_OK) 
     // 15 comands or call of W8-specific procedure goes here 
     else begin 
     MsgBox('Running on Windows 7', mbInformation, MB_OK); 
     // 15 comands or call of W7-specific procedure goes here 
     end; 
end; 

但它看起來有點難看,我...

回答

1

有在.iss文件沒有塊控制功能。

所有你能做的,以避免重複神祕的版本號,是定義就像一個預處理器變量:

#define Windows8AndNewer "MinVersion: 6.2" 
#define Windows7AndOlder "OnlyBelowVersion: 6.2" 

[Run] 
Filename: "Windows8-Command1.exe"; {#Windows8AndNewer} 
Filename: "Windows8-Command2.exe"; {#Windows8AndNewer} 

Filename: "Windows7-Command1.exe"; {#Windows7AndOlder} 
Filename: "Windows7-Command2.exe"; {#Windows7AndOlder} 

唯一的另一種方法是使用重新實現在[Code][Run]Exec function

procedure Run(FileName: string); 
var 
    ResultCode: Integer; 
begin 
    Exec(FileName, '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    // some error checking 
end; 

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
    begin 
    if GetWindowsVersion() >= $06020000 then 
    begin 
     Log('Running on Windows 8 or later'); 
     Run('Windows8-Command1.exe'); 
     Run('Windows8-Command2.exe'); 
    end 
     else 
    begin 
     Log('Running on Windows 7 or older'); 
     Run('Windows7-Command1.exe'); 
     Run('Windows7-Command2.exe'); 
    end; 
    end; 
end; 
+0

對不起,但是寫''的區別是什麼? MinVersion:15次命令後寫入15次'15次並寫入'; {#Windows8AndNewer}'15次命令後的15次。我現在將進一步編輯我的問題,以澄清我在尋找什麼 – mvidelgauz

+0

我知道這只是稍微好一點,但再一次,沒有更好的方法。 –

+0

當然,除了像已經發現的那樣,通過放棄'[Run]'部分並使用代碼。 –

相關問題