我目前正在使用inno设置中的Installer并运行bat文件检查操作系统版本并安装窗口安装程序4.5如果操作系统是窗口xp,现在我有一个问题我想检测到窗口安装程序4.5已安装或者不在机器上?
有命令msiexec弹出窗口显示版本但我需要它作为字符串来做出决定是否有任何方法可以知道当前安装的窗口安装程序版本在bat文件中?
REM Check Windows Version
ver | findstr /i "5\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_2000
ver | findstr /i "5\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_XP
ver | findstr /i "5\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_2003
ver | findstr /i "6\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_Vista
ver | findstr /i "6\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_Win7
goto warn_and_exit
:ver_XP
start WindowsXP-KB942288-v3-x86.exe
end
现在是bat文件我想在启动窗口安装程序之前检查版本是否为4.5,如果< 4.5否则安装
寻找良好而快速的反应
问候 wasif
答案 0 :(得分:3)
我会尝试这样的事情。您也可以关注此帖子的commented version
:
[Files]
Source: "WindowsXP-KB942288-v3-x86.exe"; DestDir: "{tmp}"
[Run]
Filename: "{tmp}\WindowsXP-KB942288-v3-x86.exe"; Check: CheckInstallMSI; OnlyBelowVersion: 0,6.0
[code]
const
// The minimum MSI version is 4.50.0.0
MinMSIVersionMS = (4 shl 16) or 50;
MinMSIVersionLS = (0 shl 16) or 0;
function CheckInstallMSI: Boolean;
var
MSIVersionMS: Cardinal;
MSIVersionLS: Cardinal;
begin
Result := True;
if GetVersionNumbers(ExpandConstant('{sys}\msi.dll'), MSIVersionMS, MSIVersionLS) then
if MSIVersionMS >= MinMSIVersionMS then
Result := False;
end;
来源:
答案 1 :(得分:0)
另一种解决方案:
function InitializeSetup(): Boolean;
var
MS: cardinal;
LS: cardinal;
V1 : dword;
V2 : dword;
V3 : dword;
V4 : dword;
begin
Result := true;
if GetVersionNumbers(ExpandConstant('{sys}\msi.dll'), MS, LS) then
begin
V1 := MS shr 16;
V2 := MS and $FFFF;
V3 := LS shr 16;
V4 := LS and $FFFF;
if IntToStr(V1)+'.'+IntToStr(V2) < '4.5' then begin
MsgBox('Your message...', mbConfirmation, MB_OK)
Result := False;
end;
end;
end;