Aion13
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Итак, решил проблему лучшим способ, на сколько смог. Если кому нужен код, который определяет установленное приложение и даёт выбор, начать удаление или продолжить установку, то вот: Код: [Setup] ; Определит имя раздела в реестре с информацией для удаления AppID=My Program //Можно задать любое значение, например: {0872DB47-24CB-4C7F-AC4B-E6EFC27BD244} [Code] var ResultStr:string; msgres, ResultCode: integer; begin RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr) if ResultStr='My Program Name ' then msgres:=MsgBox('"'+ ResultStr + '" уже установлена на Ваш компьютер.'+#10#10+'Для новой установки следует удалить предыдущую. Удалить её?', mbInformation, MB_YESNO); case msgres of IdYes: begin // Проверка правильности ключа удаления if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr) then begin if ResultStr<>'' then begin ResultStr:=RemoveQuotes(ResultStr); Exec(ResultStr, '/silent', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode) end else // Если не были найдены файлы удаления, то выдаётся сообщение об ошибке if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilIdle, ResultCode) then MsgBox('Ошибка удаления. ' #10#10 '' + SysErrorMessage(ResultCode) + '.' #10#10 'Вероятно, файл был перемещен, удален или переименован.', mbError, MB_OK); end end; IdNo: Result:= False; end; if ResultStr<>'' then Result := True; end; | Единственное что в таком варианте я не смог реализовать, так это отмену установки вообще (MB_YESNO поменяется при этом на MB_YESNOCANSEL и добавится новый id в case). Если кто-то знает как это сделать, прошу помочь. А может даже где-то исправить или поправить этот код p.S serg_aka_lain, может сможешь эту функцию сделать здесь? | Всего записей: 45 | Зарегистр. 04-06-2008 | Отправлено: 17:01 14-12-2008 | Исправлено: Aion13, 01:14 19-12-2008 |
|