我知道在基于Windows版本的Inno Setup Run部分中已经存在执行其他命令的问题,并且答案非常好。
我的问题是如何针对不同的目标Windows版本执行不同的命令块。我的问题是,如果目标版本是Windows 7,则我需要执行约10-15条命令,而对于Windows 8或更高版本,则需要执行相同数量的不同命令。
是否可以避免在; OnlyBelowVersion: 6.2
第一种情况下需要; MinVersion: 6.2
在每个命令之后以及第二个块中的每个命令之后添加?
我知道有预处理条件"#if"
,#else
以及#endif
但这当然在编译时只能
问题和答案虽然可能看起来与此问题相似,但在Inno Setup中确定Windows版本不会得到回答。我知道如何在Inno Setup中确定Windows版本。我也知道这些; MinVersion: 6.2
和; OnlyBelowVersion: 6.2
选项。我在问是否可以指定一个命令块(10-15个命令)并将该选项应用于整个块,而不是分别应用于每个命令。
目标不是避免“加密版本号”,而是避免多次重复相同的条件。并避免在块会随着时间增长而忘记它的风险。
我到目前为止发现的解决方案是使用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;
但这对我来说有点难看...
该文件中没有任何块控制功能.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}
唯一的其他方法是使用函数重新实现该[Run]
部分:[Code]
Exec
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句