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

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

Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата vk_k14m@vk:
Как ты узнаешь установлен у тебя на компе например Microsoft Visual C++ 2015 года »
Код: Выделить весь код
[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)
Более того, ProductCode индивидуален мало того что для каждого языка Microsoft Visual C++ 2015, так еще и для каждой его ревизии, получается целый паровоз вариантов

Цитата vk_k14m@vk:
Если он уже установлен и ты снова попытаешься его установить, установщик скажет тебе что он уже установлен? Или как нивчем не бывало продолжит установку? »
это зависит от прописанной реакции на установленный экземпляр проги, иногда и версии установленного приходится кейсить

Цитата vk_k14m@vk:
Если ты поставил на комп игру Doom. А потом случайно снова запустил установщик. Ну забыл ты что игра у тебя уже есть, склероз старческий. Тебе игра предложит установиться в тоже самое место, где она уже стоит. Откуда она это знает? »
плохой вариант по HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GUID|AppName_is1
Хороший по ключу реестра, характерного для приложения, и наличия экзешника, например вот так определяется наличие проги и её версии
Код: Выделить весь код
Function isSVPexist():boolean;
var moreOrEqual : boolean; s : string; VersionMS, VersionLS : cardinal;
begin
  RegQueryStringValue(HKCU, 'Software\SVP','Path', s);
  s := RemoveQuotes(s); s := RemoveBackslashUnlessRoot(s);
  if (FileExists(s+'\SVPMgr.exe')) then begin
    GetVersionNumbers(s+'\SVPMgr.exe', VersionMS, VersionLS);
    moreOrEqual:=true;
    if (VersionMS<$30000) then moreOrEqual:=false else begin
      if ( (VersionMS=$30000) and (VersionLS<$FA) ) then moreOrEqual:=false
    end;
    Result := moreOrEqual;
  end //(FileExists(s+'\SVPMgr.exe'))
  else Result := False;
end;
Цитата ZVSRus:
А что вы обижаетесь, как вы задаете вопросы, так вам и отвечают. Как проверить что установлено, элементарно, даже средствами INNO. Если в секции [Setup] поставить директиву DirExistsWarning=yes тогда установщик при повторной установке будет видеть путь установки что прописан в директиве DefaultDirName=C:\Games\{#MyAppName}, если по данному пути что установлено, установщик предложит вам продолжить установку или отказаться. Вот от этого и нужно было изначально плясать. »
это плохой вариант
установщик тупо посмотрит в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1 и если его нет поведет себя как будто проги нет в системе, а если ее ставили с другого установщика у которого другой GUID или {#MyAppName}?
Спорный способ

Цитата vk_k14m@vk:
И вообще. Я же сказал закрыть эту тему. Если она для вас настолько сложная, не нужно в нее вникать. Просто забудь. »
как скажешь

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 04-10-2017 в 20:19.

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

Отправлено: 20:13, 04-10-2017 | #2179