1

我目前正在使用 inno 安装程序中的安装程序并运行 bat 文件来检查操作系统版本并安装 windows 安装程序 4.5 如果操作系统是 windows xp,现在我有一个问题我想检测是 windows 安装程序 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 安装否则没有

寻求良好和快速的响应

问候瓦西夫

4

2 回答 2

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;

资料来源:

于 2012-04-24T16:36:53.527 回答
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;

代码参考:https ://www.daniweb.com/programming/software-development/threads/297848/pascal-inno-question-re-cardinal

于 2016-01-20T22:16:51.493 回答