Обнаружение 64-битной или 32-битной ОС и установка файла vcredist VC10 с помощью установщика Inno Setup

Я хочу добавить vcredist_x64.exe и vcredist_x86.exe с помощью моего установщика Inno Setup. Как мой установщик определит ОС, будь то 64-битная или 32-битная, и установит файл vcredist в соответствии с ОС.


person user3606222    schedule 29.09.2015    source источник


Ответы (1)


Попробуй это:

в разделе [Файлы] добавить

Source: "vcredist_x86.exe"; DestDir: {tmp}; Flags: IgnoreVersion replacesameversion; Check: "not IsWin64";
Source: "vcredist_x64.exe"; DestDir: {tmp}; Flags: IgnoreVersion replacesameversion; Check:IsWin64;

и в разделе [Код] выполните:

function Launch_VCRedist(svDir:String) : Boolean;
var
  svTargetApplication: String;
  svParameter: String;
  workingDir: String;
  showCmd: Integer;
  wait: TExecWait;
  resultCode: Integer;  
  VersionMS, VersionLS : Cardinal;  
  Major, Minor, Rev, Build: Cardinal;
  Version:String;
begin
  Result := True;

 //Optional: if you want to execute silently your redist.exe, add this. This is  for vc_redist version from 2005 to 2012
      GetVersionNumbers(svDir + '\vcredist_x86.exe', VersionMS, VersionLS); 
      Major := VersionMS shr 16; 
      case Major of
        11:        //2012
         begin
            svParameter := '/install /passive';
         end   
        10:        //2010
         begin
            svParameter := '/passive /showfinalerror';
         end   
        6:         //2005            
         begin
           svParameter := '/q';
         end    
        9:         //2008            
         begin
           svParameter := '/Q';
         end
      end;

  workingDir := '';
  showCmd := SW_SHOW;
  wait := ewWaitUntilTerminated;
  retVal := Exec(svDir + '\vcredist_x86.exe', svParameter, workingDir, showCmd, wait, resultCode)
  if retVal then
  begin
    //handle success if necessary; resultCode contains the exit code
  end
  else begin
    //handle failure if necessary; resultCode contains the error code
    Result := False;
  end;
end;

И в процедуру CurStepChanged добавляем:

procedure CurStepChanged(CurStep: TSetupStep);
begin
     case CurStep of
      ssPostInstall:
         b_ret := Launch_VCRedist(ExpandConstant('{tmp}'));
        if b_ret Then
        begin
        //Handle success if necessary
      end
      else begin
        //Handle failure if necessary
      end;
    end;
end;
person KingOfMazes    schedule 08.10.2015
comment
Спасибо за ответ. В каком разделе я буду размещать ниже блок кода (И в процедуре CurStepChanged добавить:). Ответьте, пожалуйста. - person user3606222; 26.12.2015
comment
@user3606222 user3606222 Эти функции можно разместить везде в разделе [Код]. Если у вас уже есть функция CurStepChanged в разделе кода, добавьте b_ret := Launch_VCRedist(ExpandConstant('{tmp}')); как пример - person KingOfMazes; 07.01.2016
comment
Это опечатка? Check: Check:IsWin64; - person Sandburg; 21.11.2018