Delphi:对某些环境变量的检测

有日子没有都有动Delphi了,安装了Delphi2007 For Win32 做了一个安装程序的东东。主要部分就是检测系统环境的变量。
   1. 操作系统的检测
   2. WindowsInstaller版本的检测 (要求最低配置3.1)
   3. .Net FrameWork 版本的检测 (最低配置2.0)
   4. Office ACE Oledb驱动程序的检测。
 代码共享如下:
  1.操作系统检测。
 function GetOSVersion: string;
var
  OSVer : TOSVersionInfo;
begin
  Result := '无法检测系统版本';
  OSVer.dwOSVersionInfoSize := SizeOf(OSVer);
  GetVersionEx(OSVer);
  case OSVer.dwMajorVersion of
    6: Result := 'Windows Vista';
    5: begin
         case OSVer.dwMinorVersion of
           0 : Result := 'Windows2000';
           1 : Result := 'WindowsXP';
           2 : Result := 'Windows2003';
         end;
       end;
    4: begin
         if OSVer.dwPlatformId=VER_PLATFORM_WIN32_NT then
         begin
            Result := 'Window NT';
         end
         else
         begin
            case OSVer.dwMinorVersion of
               0 : Result := 'Windows95';
               10: Result := 'Windows98';
               90: Result := 'WindowsMe';
            end;
         end;
        
       end;
  end;
end;

  
2. WindowsInstaller版本的检测
  偷个懒,方法就是检测  System32 下的 msiexec.exe的版本号,是3.1就ok了。
  附赠: 获取文件版本的方法。
function GetVersion(sFile: string;
  bIncludeBuild: boolean): string;
var
 dwfvw, dwZero, dwvsf: DWORD;
 Major, Minor, Release, Build: DWORD;
 pfvw: PChar;
 pvsf: PVSFixedFileInfo;
 s: string;
begin
 Result:='';
 dwfvw:=GetFileVersionInfoSize(PChar(sFile), dwZero);
 if dwfvw<>0 then
 begin
   GetMem(pfvw, dwfvw);
   try
     if(GetFileVersionInfo(PChar(sFile), dwZero, dwfvw, pfvw))then
     begin
       if(VerQueryValue(pfvw, '\', Pointer(pvsf), dwvsf))then
       begin
         if((pvsf^.dwFileFlags and VS_FF_PRERELEASE)>0)then
         begin
           s:='beta';
         end
         else begin
           s:='';
         end;
         Major:=HIWORD(pvsf^.dwFileVersionMS);
         Minor:=LOWORD(pvsf^.dwFileVersionMS);
         Release:=HIWORD(pvsf^.dwFileVersionLS);
         Build:=LOWORD(pvsf^.dwFileVersionLS);
         Result:=Format('%d.%d.%d.%d', [Major, Minor, Release, Build]);
         if bIncludeBuild then
         begin
           if Release>0 then
           begin
             Result:=Format('%d.%d.%d.%d', [Major, Minor, Release, Build])
           end
           else begin
             Result:=Format('%d.%d.%d', [Major, Minor, Build])
           end;
         end
         else begin
           if Release>0 then begin
             Result:=Format('%d.%d.%d', [Major, Minor, Release])
           end
           else begin
             Result:=Format('%d.%d', [Major, Minor])
           end;
         end;
       end;
     end;
   finally
     FreeMem(pfvw);
   end;
 end;
end;

3. .Net Framework 版本的检测。
  这个是根据注册表信息判断的,有待验证。
function CheckNetFramework: string;
var
  Reg : TRegistry;
  ValueList  : TStringList;
begin
   Reg := TRegistry.Create ;
   ValueList  := TStringList.Create ;
   Reg.RootKey := HKEY_LOCAL_MACHINE;
   if not  Reg.KeyExists('SOFTWARE\Microsoft\.NETFramework') then
      Result := '需要安装.Net FrameWork'
   else
   begin
     if Reg.OpenKey('SOFTWARE\Microsoft\NET Framework Setup\NDP',true) then
     begin
       Reg.GetKeyNames(ValueList);
       if ValueList.IndexOf('v2.0.50727')<0 then
         Result := '最低配置版本:2.0.50727,当前版本:'+ StringReplace( ValueList.Strings[ValueList.Count-1],'v','',[rfReplaceAll,rfIgnoreCase])
       else
         Result := '当前版本:'+ StringReplace( ValueList.Strings[ValueList.Count-1],'v','',[rfReplaceAll,rfIgnoreCase]);
     end;
   end;
   ValueList.Free ;
   Reg.Free;
end;

4. Office ACE OLe DB 驱动判断
 同样是注册表。
function CheckACE: Boolean;
var
  Reg : TRegistry;
begin
  Reg := TRegistry.Create;
  Reg.RootKey :=HKEY_CLASSES_ROOT;
  if Reg.KeyExists('Microsoft.ACE.OLEDB.12.0') then
    Result := true
  else
    Result := false;
  isPass := Result;
  Reg.Free;
end;

其他的如判断IIS是否安装,MDAC的版本等等,以后再说吧!

你可能感兴趣的:(Delphi)