Установка Inno часто аварийно завершает работу при запуске в автоматическом режиме

Поэтому я запускаю программу установки со следующей командой:

C:Program Files (x86)ExampleExampleSetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART

Но по какой-то странной причине у установщика есть 50% шанс сбоя, и когда он действительно терпит неудачу, он возвращает случайный код выхода из 0-3.
Я думаю, что это может быть из/VERYSILENT-за того, что я никогда не видел этого поведения при запуске его неслышно.
Я также использую SetupMutexв [Setup]разделе, так может быть это тот случай, что его сбой половину времени?
Я также хотел бы получить значимый код выхода, если процесс аварийно завершает работу, чтобы я мог отладить проблему.
Это выходные данные журнала:



2016-05-02 11:33:01.421   Log opened. (Time zone: UTC+03:00)
2016-05-02 11:33:01.421   Setup version: Inno Setup version 5.5.6 (u)
2016-05-02 11:33:01.421   Original Setup EXE: C:Program Files (x86)MaprinterMaprinterSetup.exe
2016-05-02 11:33:01.421   Setup command line: /SL5="$F403AE,242855,184832,C:Program Files (x86)MaprinterMaprinterSetup.exe" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART "/LOG=C:Program Files (x86)MaprinterMaprinterSetup.log" Restart
2016-05-02 11:33:01.421   Windows version: 10.0.10586  (NT platform: Yes)
2016-05-02 11:33:01.421   64-bit Windows: Yes
2016-05-02 11:33:01.421   Processor architecture: x64
2016-05-02 11:33:01.421   User privileges: Administrative
2016-05-02 11:33:01.422   64-bit install mode: No
2016-05-02 11:33:01.425   Created temporary directory: C:WINDOWSTEMPis-SM12R.tmp
2016-05-02 11:33:01.494   Extracting temporary file: C:WINDOWSTEMPis-SM12R.tmpInnoCallback.dll
2016-05-02 11:33:01.593   Extracting temporary file: C:WINDOWSTEMPis-SM12R.tmpunzipper.dll
2016-05-02 11:33:01.723   Exception message:
2016-05-02 11:33:01.723   Defaulting to OK for suppressed message box (OK):
                          Error reading WelcomeLabel2.Caption: System Error.  Code: 1411.
                          Class does not exist.
2016-05-02 11:33:01.723   Deinitializing Setup.
2016-05-02 11:33:01.728   Log closed.

Это другой выход журнала для той же проблемы:

2016-05-02 12:04:50.495   Log opened. (Time zone: UTC+03:00)
2016-05-02 12:04:50.495   Setup version: Inno Setup version 5.5.6 (u)
2016-05-02 12:04:50.495   Original Setup EXE: C:Program Files (x86)MaprinterMaprinterSetup.exe
2016-05-02 12:04:50.495   Setup command line: /SL5="7016C,242855,184832,C:Program Files (x86)MaprinterMaprinterSetup.exe" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /LOG=C:UsersyuvadiusDesktopMaprinterSetup.log Restart
2016-05-02 12:04:50.495   Windows version: 10.0.10586  (NT platform: Yes)
2016-05-02 12:04:50.495   64-bit Windows: Yes
2016-05-02 12:04:50.495   Processor architecture: x64
2016-05-02 12:04:50.495   User privileges: Administrative
2016-05-02 12:04:50.496   64-bit install mode: No
2016-05-02 12:04:50.500   Created temporary directory: C:WINDOWSTEMPis-NFR0Q.tmp
2016-05-02 12:04:50.528   Extracting temporary file: C:WINDOWSTEMPis-NFR0Q.tmpInnoCallback.dll
2016-05-02 12:04:50.607   Extracting temporary file: C:WINDOWSTEMPis-NFR0Q.tmpunzipper.dll
2016-05-02 12:04:50.763   Exception message:
2016-05-02 12:04:50.763   Defaulting to OK for suppressed message box (OK):
                          System Error.  Code: 8.
                          Not enough storage is available to process this command.
2016-05-02 12:04:50.763   Deinitializing Setup.
2016-05-02 12:04:50.770   Log closed.

Поэтому мой конкретный вопрос: Почему мой установщик часто сбоит и что я могу сделать, чтобы решить эту проблему?

1 ответ

  1. Я бы начал с временного удаления «таймера».

    Скорее всего, таймер истекает примерно в то время, когда быстрая автоматическая установка завершается, поэтому mytimerprocпытается получить доступ к окну, которое больше не существует, или скрипт pascal уничтожается.

    Если это окажется так (и на самом деле, даже если нет), вы должны исправить эти проблемы:

    • вам нужно уничтожить таймер, когда установщик закрывается (возможно, от CurStepChanged(ssDone))
    • возможно, вы даже не хотите планировать таймер в очень тихих установках, так как нет формы, чтобы сделать прозрачным.
    • вы должны запланировать таймер вInitializeWizard, а не в InitializeSetup, так как вы рискуете окно еще не существует в противном случае, когда таймер истекает, если программа установки запускается медленно.