Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата abc:
Подскажите, как сделать в программе установки проверку на наличие установленного распространяемого пакета ms visual c++ 2008 и в случае отсутствия автоматически (с учётом разрядности системы) загрузить»
У меня есть пример проверки и загрузки в случае отсутствия .NET Framework'a, можете сделать по аналогии
Пример
Код: Выделить весь код
; определение версии установленного .NetFramework

[Setup]
AppName=NetFramework
AppVerName=NetFramework
DefaultDirName={pf}\NetFramework
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
VersionInfoCopyright=Serega

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Code]
const
  MinNetFrameWork = 'v3.5'; // минимальная версия NetFrameWork

var
  url: string;

function GetNetFrameWork(ver: string): Integer;
begin
// страница загрузок http://www.microsoft.com/downloads/results.aspx?pocId=&freetext=Framework&DisplayLang=ru
  Result:= 5;
  url:= 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
  case ver of
   'v1.0':
      begin
      // по этой ссылке v1.1, т.к. ссылку на v1.0, я не нашёл... раритет... ;)
        url:= 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
        Result:= 0;
      end;
   'v1.1':
      begin
        url:= 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
        Result:= 1;
      end;
   'v2.0':
      begin
        url:= 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
        Result:= 2;
      end;
   'v3.0':
      begin
        url:= 'http://download.microsoft.com/download/4/d/a/4da3a5fa-ee6a-42b8-8bfa-ea5c4a458a7d/dotnetfx3setup.exe';
        Result:= 3;
      end;
   'v3.5':
      begin
        url:= 'http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe';
        Result:= 4;
      end;
  end;
end;

function SearchNetFrameWork: Boolean;
var
  Error: Integer;
  VerNetFrameWork: array of string;
  VerNetFrameWorkInstalled: TArrayOfString;
  i, n: Integer;
begin
  VerNetFrameWork:= ['v1.0', 'v1.1', 'v2.0', 'v3.0', 'v3.5'];
  SetArrayLength(VerNetFrameWork, GetArrayLength(VerNetFrameWork));
  if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy', VerNetFrameWorkInstalled) then
    begin
      SetArrayLength(VerNetFrameWorkInstalled, GetArrayLength(VerNetFrameWorkInstalled));
      for i:= 0 to GetArrayLength(VerNetFrameWorkInstalled)-1 do
        begin
          for n:= 0 to GetArrayLength(VerNetFrameWork)-1 do
          if VerNetFrameWorkInstalled[i] = VerNetFrameWork[n] then
          if n >= GetNetFrameWork(MinNetFrameWork) then
            begin
              Result:= True;
              Break;
            end
          else
            begin
              if MsgBox('Для этой программы требуется установленный .NET Framework не ниже ' + MinNetFrameWork + '. ' +
                        'Пожалуйста загрузите и установите .NET Framework и запустите установку снова. ' +
                        'Вы хотите загрузить .NET Framework сейчас?', mbConfirmation, MB_YESNO) = idYes then
              ShellExec('open', url,'','',SW_SHOWNORMAL,ewNoWait,Error);
              Result:= False;
            end;
        end;
    end;
end;

function InitializeSetup: Boolean;
begin
  if SearchNetFrameWork then Result:= True;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:51, 11-11-2009 | #391