Проверьте, была ли установлена и удалена предыдущая версия любого (настраиваемого) приложения (настройка приложения была разработана с использованием NSIS)

В настройке Inno я хочу проверить, установлена ли предыдущая версия приложения, и удалять ее автоматически, если она обнаружена. Ключ реестра, чтобы проверить, существует ли это приложение: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Shockwave Player И команда молчания по удалению: C:\Windows\system32\Adobe\Shockwave 12\uninstaller.exe/S Примечание. -The настройка приложения была разработана с использованием NSIS.

И еще одно: я не хочу, чтобы окно сообщения отображалось, если найдена предыдущая версия. Предыдущая версия того же приложения - v12.1.3.153 или ниже. Полный скрипт Inno для любой ссылки: http://pastebin.com/HmrNcFd4

Поэтому, пожалуйста, предоставьте код. Большое спасибо!!

1 ответ

Сначала вы создаете новый GUID для своего приложения (он как первичный ключ для вашего приложения в реестре)

; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
#define MyAppGUID "D8C85F98-A805-4237-8D7C-C2F050C19B47"
#define MyAppId MyAppName + "_" + MyAppGUID

Добавьте эту команду в раздел [Код] и в функцию InitializeSetup().

[Code]
function InitializeSetup(): Boolean;
var ResultCode: Integer; ResultStr:string;
begin // Check if the application is already install // MsgBox('MyAppId = ' + '{#MyAppId}', mbInformation, mb_Ok); begin If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'UninstallString', ResultStr) then begin If ResultStr<>'' then begin ResultStr:=RemoveQuotes(ResultStr); if MsgBox('This application is already install. ' #13#13 'Uninstall it ?', mbConfirmation, MB_YESNO) = idYes then if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then MsgBox('Erreur !!! ' #13#13 '' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); end; end; end ; Result := True;
end;

licensed under cc by-sa 3.0 with attribution.