Я считаю, что вам нужно добавить еще несколько обработчиков событий в ваш основной скрипт. Для начала вам нужно добавить следующие обработчики, если они еще не присутствуют:
- OnShowUI
- OnUpdateUIBперед
- OnUpdateUIAfter
- OnMaintUIBперед
- OnMaintUIAfter
Важно иметь OnShowUI для запуска соответствующего метода «До». Ниже то, что я делаю; вам нужно будет делать все, что вам нужно, в других методах (мои довольно специфичны для домена, и я не могу предоставить их напрямую).
//---------------------------------------------------------------------------
// OnShowUI
//
// This function drives the UI sequence and file transfer of the setup.
//
// The OnShowUI event is called directly by the framework to initiate
// the UI sequence and file transfer of the setup. By default this event
// displays UI that informs the end user that the maintenance setup has been
// completed successfully.
//---------------------------------------------------------------------------
function OnShowUI()
BOOL bMaintenanceMode, bUpdateMode;
string szIgnore, szTitle;
LIST listDirs;
number nFindAllDirsResult, nFindAllFilesResult;
BOOL lDirEmpty;
begin
// Enable dialog caching
Enable( DIALOGCACHE );
// Determine what events to show
bUpdateMode = FALSE;
bMaintenanceMode = FALSE;
// Remove this to disabled update mode
if (UPDATEMODE) then
// checking to make sure app still exists in orig location
if Is(PATH_EXISTS, TARGETDIR) then
// Also check for empty TargetDir
lDirEmpty = IsTargetDirEmpty();
if (lDirEmpty) then
// TARGETDIR is completely empty, so disable UPDATE mode
bUpdateMode = FALSE;
else
// TARGETDIR has some contents, so continue with UPDATE
bUpdateMode = TRUE;
endif;
else
// Turn off Update mode if original folder is gone
bUpdateMode = FALSE;
endif;
if (!bUpdateMode) then
// If Update mode is set but the original target is missing
// need to flag the installer to force full reinstall (otherwise it will
// think all features have already been installed (by analyzing the log))
FeatureReinstall();
endif;
endif;
// Remove this to disable maintenance mode.
if (MAINTENANCE) then
// checking to make sure app still exists in orig location
if Is(PATH_EXISTS, TARGETDIR) then
// Also check for empty TargetDir
lDirEmpty = IsTargetDirEmpty();
if (lDirEmpty) then
// TARGETDIR is completely empty, so disable Maint mode
bMaintenanceMode = FALSE;
else
// TARGETDIR has some contents, so continue with Maint
bMaintenanceMode = TRUE;
endif;
else
// Turn off maintenance mode if original folder is gone
bMaintenanceMode = FALSE;
endif;
if (!bMaintenanceMode) then
// If Maintenance mode is set but the original target is missing
// need to flag the installer to force full reinstall (otherwise it will
// think all features have already been installed (by analyzing the log))
FeatureReinstall();
endif;
endif;
// Show appropriate UI
if( bUpdateMode ) then
OnUpdateUIBefore();
else
if ( bMaintenanceMode ) then
OnMaintUIBefore();
else
OnFirstUIBefore();
endif;
endif;
// Move Data
OnMoveData();
if( bUpdateMode ) then
OnUpdateUIAfter();
else
if ( bMaintenanceMode ) then
OnMaintUIAfter();
else
OnFirstUIAfter();
endif;
endif;
// Disable dialog caching
Disable(DIALOGCACHE);
end;
Скажу, что в OnUpdateUIBefore я закомментировал следующий код:
// Check whether the update is needed.
if( nResult = VERSION_COMPARE_RESULT_SAME ) then
// Note: This result should occur only for differential media, since the setup
// will display OnMaintUIBefore or OnFirstUIBefore by default if the versions match
// for full setup media.
szMsg = SdLoadString( IDS_IFX_WARNING_UPDATE_NOT_NEEDED );
SdSubstituteProductInfo( szMsg );
if( MessageBox( szMsg, MB_ICONEXCLAMATION | MB_YESNO ) != IDYES ) then
abort;
endif;
endif;
Я не помню почему, но подозреваю, что из-за этого режим обновления работал не так, как я ожидал.
Я автоматизирую свои сборки Installshield (через COM - см. этот ответ для базовой информации, если интересно), и часть этого процесса включает в себя увеличение второстепенная версия, чтобы активировать режим обновления, когда новый установщик запускается с более старой версией.
Удачи!
person
Steve
schedule
10.03.2017