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

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

Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Devils Night:
нужно чтобы сам инсталятор проверял на наличие установленных компонентов »
Devils Night, и это правильно.

Цитата Devils Night:
Может будут, какие другие варианты? »
dotnetfx3_x86, vcredist_x86, xliveredist - сердцем этих установщиков является msi-документ, а значит используем возможности API системы, а именно функцию MsiQueryProductState.

Код: Выделить весь код
[code]
const
  INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE 
  #define A "W" 
 #else 
  #define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
  Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010  x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
  if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
    MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
  else
    MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;
ProductCode можно посмотреть в msi-документе с помощью Orca (таблица Property, свойство ProductCode)
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:13, 14-08-2011 | #2725