Inno Setup – Verifique si el archivo existe en el destino o si no cancela la instalación

Necesito que mi instalador compruebe si existe un archivo en la ubicación de destino, y si no está allí, la instalación se interrumpe. Mi proyecto es un parche de actualización, por lo que quiero que el instalador evite instalar los archivos de actualización si el principal de la aplicación no está en el destino. ¿Cómo puedo hacer esto?

¿Alguien puede dar un ejemplo de código para verificar la versión del archivo a través del registro de Windows?

[Files] Source C:\filename.exe; DestDir {app}; Flags: ignoreversion; BeforeInstall: CheckForFile; [code] procedure CheckForFile(): Boolean; begin if (FileExists('c:\somefile.exe')) then begin MsgBox('File exists, install continues', mbInformation, MB_OK); Result := True; end else begin MsgBox('File does not exist, install stops', mbCriticalError, MB_OK); Result := False; end; end; 

Simplemente no permita que el usuario proceda hasta que elija la carpeta correcta.

 function NextButtonClick(PageId: Integer): Boolean; begin Result := True; if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\yourapp.exe')) then begin MsgBox('YourApp does not seem to be installed in that folder. Please select the correct folder.', mbError, MB_OK); Result := False; exit; end; end; 

Por supuesto, también es una buena idea tratar de elegir automáticamente la carpeta correcta para ellos, por ejemplo. recuperando la ubicación correcta fuera del registro.

Otra solución sería InitializeSetup() :

Crédito: Manfred

 [code] function InitializeSetup(): Boolean; begin if (FileExists(ExpandConstant('{pf}\{#MyAppName}\somefile.exe'))) then begin MsgBox('Installation validated', mbInformation, MB_OK); Result := True; end else begin MsgBox('Abort installation', mbCriticalError, MB_OK); Result := False; end; end;