Explorar o código

Merge branch 'main' into files-download

# Conflicts:
#	Projects/Src/Setup.MainFunc.pas
Martijn Laan hai 3 meses
pai
achega
eb7f104e80

+ 9 - 31
.github/workflows/build.yml

@@ -2,6 +2,7 @@ name: build
 
 
 on:
 on:
   push:
   push:
+  workflow_dispatch:
 
 
 env:
 env:
   HOME: "${{github.workspace}}\\home"
   HOME: "${{github.workspace}}\\home"
@@ -29,25 +30,6 @@ jobs:
           Remove-Item issrc-build-env.zip
           Remove-Item issrc-build-env.zip
           $DELPHIXEROOT = (Get-Item .\issrc-build-env).FullName
           $DELPHIXEROOT = (Get-Item .\issrc-build-env).FullName
           "DELPHIXEROOT=$DELPHIXEROOT" |  Out-File -NoNewLine -Encoding ascii -Append "$env:GITHUB_ENV"
           "DELPHIXEROOT=$DELPHIXEROOT" |  Out-File -NoNewLine -Encoding ascii -Append "$env:GITHUB_ENV"
-      - name: Prepare home directory for code-signing
-        env:
-          CODESIGN_P12: ${{secrets.CODESIGN_P12}}
-          CODESIGN_PASS: ${{secrets.CODESIGN_PASS}}
-        if: env.CODESIGN_P12 != '' && env.CODESIGN_PASS != ''
-        shell: bash
-        run: |
-          mkdir -p home/bin &&
-          echo -n "$CODESIGN_P12" | tr % '\n' | base64 -d >home/.codesign.p12 &&
-          printf '%s ' >home/bin/run-signtool.bat \
-            '"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign' \
-            '/v /fd SHA256 /du "https://jrsoftware.org" /d "Inno Setup"' \
-            '/tr http://timestamp.comodoca.com?td=sha256 /td SHA256' \
-            '/f "${{github.workspace}}\home\.codesign.p12"' \
-            "/p \"$CODESIGN_PASS\" \"%1\"" &&
-          printf '%s\n' >setup-sign.bat \
-            'mkdir tmp-unsigned' \
-            'copy files tmp-unsigned' \
-            'tmp-unsigned\iscc /Sissigntool256="${{github.workspace}}\home\bin\run-signtool.bat $f" /DSIGNTOOL setup.iss'
       - name: build issrc
       - name: build issrc
         run: |
         run: |
           "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -Encoding ascii compilesettings.bat
           "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -Encoding ascii compilesettings.bat
@@ -55,30 +37,26 @@ jobs:
           "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -NoNewline -Encoding ascii ISHelp\ISHelpGen\compilesettings.bat
           "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -NoNewline -Encoding ascii ISHelp\ISHelpGen\compilesettings.bat
           "set HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii ISHelp\compilesettings.bat
           "set HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii ISHelp\compilesettings.bat
           .\build.bat
           .\build.bat
-      - name: Clean up temporary files
-        if: always()
-        shell: bash
-        run: rm -rf home setup-sign.bat
       - name: copy license.txt into all artifacts
       - name: copy license.txt into all artifacts
         run: |
         run: |
           copy license.txt Files
           copy license.txt Files
           copy license.txt Output
           copy license.txt Output
           copy license.txt ISHelp/Staging
           copy license.txt ISHelp/Staging
       - name: upload Files
       - name: upload Files
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
         with:
           name: Files
           name: Files
-          path: Files
+          path: Files/
       - name: upload installer
       - name: upload installer
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
         with:
           name: Output
           name: Output
-          path: Output
+          path: Output/
       - name: upload ISHelp
       - name: upload ISHelp
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
         with:
           name: ISHelp
           name: ISHelp
-          path: ISHelp/Staging
+          path: ISHelp/Staging/
       - name: find mt.exe
       - name: find mt.exe
         shell: bash
         shell: bash
         run: |
         run: |
@@ -114,10 +92,10 @@ jobs:
           ./Procmon.exe -Terminate -Quiet &&
           ./Procmon.exe -Terminate -Quiet &&
           powershell -command 'start-process -NoNewWindow -Wait -FilePath .\Procmon.exe -ArgumentList "-OpenLog trace\procmon.pml -SaveAs trace\procmon.csv"'
           powershell -command 'start-process -NoNewWindow -Wait -FilePath .\Procmon.exe -ArgumentList "-OpenLog trace\procmon.pml -SaveAs trace\procmon.csv"'
       - name: upload trace
       - name: upload trace
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
         with:
           name: trace
           name: trace
-          path: trace
+          path: trace/
       - name: check trace
       - name: check trace
         shell: bash
         shell: bash
         run: |
         run: |

+ 16 - 2
Files/Languages/Italian.isl

@@ -1,5 +1,5 @@
 ; [email protected]
 ; [email protected]
-; *** Inno Setup version 6.4.0+ Italian messages ***
+; *** Inno Setup version 6.5.0+ Italian messages ***
 ;
 ;
 ; To download user-contributed translations of this file, go to:
 ; To download user-contributed translations of this file, go to:
 ;    https://jrsoftware.org/files/istrans/
 ;    https://jrsoftware.org/files/istrans/
@@ -20,6 +20,8 @@
 ; understand the '[LangOptions] section' topic in the help file.
 ; understand the '[LangOptions] section' topic in the help file.
 LanguageName=Italiano
 LanguageName=Italiano
 LanguageID=$0410
 LanguageID=$0410
+; LanguageCodePage should always be set if possible, even if this file is Unicode
+; For English it's set to zero anyway because English only uses ASCII characters
 LanguageCodePage=1252
 LanguageCodePage=1252
 ; If the language you are translating to requires special font faces or
 ; If the language you are translating to requires special font faces or
 ; sizes, uncomment any of the following entries and change them accordingly.
 ; sizes, uncomment any of the following entries and change them accordingly.
@@ -91,7 +93,7 @@ AboutSetupMenuItem=&Informazioni sull'installazione...
 AboutSetupTitle=Informazioni sull'installazione
 AboutSetupTitle=Informazioni sull'installazione
 AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4
 AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4
 AboutSetupNote=
 AboutSetupNote=
-TranslatorNote=Traduzione italiana a cura di Rinaldo M. aka Whiteshark e bovirus (v. 25.11.2024)
+TranslatorNote=Traduzione italiana a cura di Rinaldo M. aka Whiteshark e bovirus (v. 10.06.2025)
 
 
 ; *** Buttons
 ; *** Buttons
 ButtonBack=< &Indietro
 ButtonBack=< &Indietro
@@ -236,6 +238,11 @@ StopExtraction=Sei sicuro di voler interrompere l'estrazione?
 ErrorExtractionAborted=Estrazione interrotta
 ErrorExtractionAborted=Estrazione interrotta
 ErrorExtractionFailed=Estrazione fallita: %1
 ErrorExtractionFailed=Estrazione fallita: %1
 
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=La password non è corretta
+ArchiveIsCorrupted=L'archivio non è integro
+ArchiveUnsupportedFormat=Questo formato archivio non è supportato
+
 ; *** "Preparing to Install" wizard page
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Preparazione all'installazione
 WizardPreparing=Preparazione all'installazione
 PreparingDesc=Preparazione all'installazione di [name] nel computer.
 PreparingDesc=Preparazione all'installazione di [name] nel computer.
@@ -314,6 +321,12 @@ FileAbortRetryIgnoreSkipNotRecommended=&Salta questo file (non suggerito)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora questo errore e continua (non suggerito)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora questo errore e continua (non suggerito)
 SourceIsCorrupted=Il file sorgente è danneggiato
 SourceIsCorrupted=Il file sorgente è danneggiato
 SourceDoesntExist=Il file sorgente "%1" non esiste
 SourceDoesntExist=Il file sorgente "%1" non esiste
+SourceVerificationFailed=Verifica del file sorgente non riuscita: %1
+VerificationSignatureDoesntExist=File firma "%1" non disponibile
+VerificationSignatureInvalid=Il file firma "%1" non è valido
+VerificationKeyNotFound=Il file firma "%1" usa una chiave sconosciuta
+VerificationFileSizeIncorrect=La dimensione del file non è corretta
+VerificationFileHashIncorrect=L'hash del file non è corretto
 ExistingFileReadOnly2=Il file esistente non può essere sostituito in quanto segnato come in sola lettura.
 ExistingFileReadOnly2=Il file esistente non può essere sostituito in quanto segnato come in sola lettura.
 ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova
 ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova
 ExistingFileReadOnlyKeepExisting=&Mantieni il file esistente
 ExistingFileReadOnlyKeepExisting=&Mantieni il file esistente
@@ -332,6 +345,7 @@ ErrorChangingAttr=Si è verificato un errore durante il tentativo di modifica de
 ErrorCreatingTemp=Si è verificato un errore durante la creazione di un file nella cartella di installazione:
 ErrorCreatingTemp=Si è verificato un errore durante la creazione di un file nella cartella di installazione:
 ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente:
 ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente:
 ErrorCopying=Si è verificato un errore durante la copia di un file:
 ErrorCopying=Si è verificato un errore durante la copia di un file:
+ErrorExtracting=Si è verificato un errore durante l'estrazione di un archivio:
 ErrorReplacingExistingFile=Si è verificato un errore durante la sovrascrittura del file esistente:
 ErrorReplacingExistingFile=Si è verificato un errore durante la sovrascrittura del file esistente:
 ErrorRestartReplace=Errore durante riavvio o sostituzione:
 ErrorRestartReplace=Errore durante riavvio o sostituzione:
 ErrorRenamingTemp=Si è verificato un errore durante il tentativo di rinominare un file nella cartella di installazione:
 ErrorRenamingTemp=Si è verificato un errore durante il tentativo di rinominare un file nella cartella di installazione:

+ 51 - 39
Files/Languages/Ukrainian.isl

@@ -1,16 +1,16 @@
-; *** Inno Setup version 6.4.0+ Ukrainian messages ***
+; *** Inno Setup version 6.5.0+ Ukrainian messages ***
 ; Author: Dmytro Onyshchuk
 ; Author: Dmytro Onyshchuk
 ; E-Mail: [email protected]
 ; E-Mail: [email protected]
 ; Please report all spelling/grammar errors, and observations.
 ; Please report all spelling/grammar errors, and observations.
 ; Version 2020.08.04
 ; Version 2020.08.04
-; Updated and Reviewed on 24.12.2024 by Sergii Leonov ([email protected])
+; Updated and Reviewed on 08.06.2025 by Sergii Leonov ([email protected])
 
 
-; *** Український переклад Inno Setup для версії 6.4.0 та вище***
+; *** Український переклад Inno Setup для версії 6.5.0 та вище***
 ; Автор перекладу: Дмитро Онищук
 ; Автор перекладу: Дмитро Онищук
 ; E-Mail: [email protected]
 ; E-Mail: [email protected]
 ; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
 ; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
 ; Версія перекладу 2020.08.04
 ; Версія перекладу 2020.08.04
-; Оновлено та переглянуто 24.12.2024, Сергій Леонов ([email protected])
+; Оновлено та переглянуто 08.06.2025, Сергій Леонов ([email protected])
 
 
 [LangOptions]
 [LangOptions]
 LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
 LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
@@ -33,12 +33,12 @@ ErrorTitle=Помилка
 ; *** SetupLdr messages
 ; *** SetupLdr messages
 SetupLdrStartupMessage=Ця програма встановить %1 на ваш комп'ютер, бажаєте продовжити?
 SetupLdrStartupMessage=Ця програма встановить %1 на ваш комп'ютер, бажаєте продовжити?
 LdrCannotCreateTemp=Неможливо створити тимчасовий файл. Встановлення перервано
 LdrCannotCreateTemp=Неможливо створити тимчасовий файл. Встановлення перервано
-LdrCannotExecTemp=Неможливо виконати файл в тимчасовій папці. Встановлення перервано
+LdrCannotExecTemp=Неможливо виконати файл у тимчасовій теці. Встановлення перервано
 HelpTextNote=
 HelpTextNote=
 
 
 ; *** Startup error messages
 ; *** Startup error messages
 LastErrorMessage=%1.%n%nПомилка %2: %3
 LastErrorMessage=%1.%n%nПомилка %2: %3
-SetupFileMissing=Файл %1 відсутній в папці встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
+SetupFileMissing=Файл %1 відсутній у теці встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
 SetupFileCorrupt=Файли встановлення пошкоджені. Будь ласка, отримайте нову копію програми.
 SetupFileCorrupt=Файли встановлення пошкоджені. Будь ласка, отримайте нову копію програми.
 SetupFileCorruptOrWrongVer=Файли встановлення пошкоджені або несумісні з цією версією програми встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
 SetupFileCorruptOrWrongVer=Файли встановлення пошкоджені або несумісні з цією версією програми встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
 InvalidParameter=Командний рядок містить недопустимий параметр:%n%n%1
 InvalidParameter=Командний рядок містить недопустимий параметр:%n%n%1
@@ -66,8 +66,8 @@ PrivilegesRequiredOverrideCurrentUser=Встановити тільки для 
 PrivilegesRequiredOverrideCurrentUserRecommended=Встановити тільки для &мене (рекомендується)
 PrivilegesRequiredOverrideCurrentUserRecommended=Встановити тільки для &мене (рекомендується)
 
 
 ; *** Misc. errors
 ; *** Misc. errors
-ErrorCreatingDir=Програмі встановлення не вдалося створити папку "%1"
-ErrorTooManyFilesInDir=Програмі встановлення не вдалося створити файл в папці "%1", тому що в ньому занадто багато файлів
+ErrorCreatingDir=Програмі встановлення не вдалося створити теку "%1"
+ErrorTooManyFilesInDir=Програмі встановлення не вдалося створити файл у теці "%1", тому що в ньому занадто багато файлів
 
 
 ; *** Setup common messages
 ; *** Setup common messages
 ExitSetupTitle=Вихід з програми встановлення
 ExitSetupTitle=Вихід з програми встановлення
@@ -91,7 +91,7 @@ ButtonNoToAll=Н&і для Всіх
 ButtonFinish=&Готово
 ButtonFinish=&Готово
 ButtonBrowse=&Огляд...
 ButtonBrowse=&Огляд...
 ButtonWizardBrowse=О&гляд...
 ButtonWizardBrowse=О&гляд...
-ButtonNewFolder=&Створити папку
+ButtonNewFolder=&Створити теку
 
 
 ; *** "Select Language" dialog messages
 ; *** "Select Language" dialog messages
 SelectLanguageTitle=Виберіть мову встановлення
 SelectLanguageTitle=Виберіть мову встановлення
@@ -100,9 +100,9 @@ SelectLanguageLabel=Виберіть мову, яка буде використ
 ; *** Common wizard text
 ; *** Common wizard text
 ClickNext=Натисніть «Далі», щоб продовжити, або «Скасувати» для виходу з програми встановлення.
 ClickNext=Натисніть «Далі», щоб продовжити, або «Скасувати» для виходу з програми встановлення.
 BeveledLabel=
 BeveledLabel=
-BrowseDialogTitle=Огляд папок
-BrowseDialogLabel=Виберіть папку зі списку та натисніть «ОК».
-NewFolderName=Нова папка
+BrowseDialogTitle=Огляд тек
+BrowseDialogLabel=Виберіть теку зі списку та натисніть «ОК».
+NewFolderName=Нова тека
 
 
 ; *** "Welcome" wizard page
 ; *** "Welcome" wizard page
 WelcomeLabel1=Ласкаво просимо до програми встановлення [name]
 WelcomeLabel1=Ласкаво просимо до програми встановлення [name]
@@ -141,8 +141,8 @@ UserInfoNameRequired=Ви повинні ввести ім'я.
 ; *** "Select Destination Location" wizard page
 ; *** "Select Destination Location" wizard page
 WizardSelectDir=Вибір шляху встановлення
 WizardSelectDir=Вибір шляху встановлення
 SelectDirDesc=Куди ви бажаєте встановити [name]?
 SelectDirDesc=Куди ви бажаєте встановити [name]?
-SelectDirLabel3=Програма встановить [name] у наступну папку.
-SelectDirBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу папку, натисніть «Огляд».
+SelectDirLabel3=Програма встановить [name] у наступну теку.
+SelectDirBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу теку, натисніть «Огляд».
 DiskSpaceGBLabel=Необхідно як мінімум [gb] Гб вільного дискового простору.
 DiskSpaceGBLabel=Необхідно як мінімум [gb] Гб вільного дискового простору.
 DiskSpaceMBLabel=Необхідно як мінімум [mb] Mб вільного дискового простору.
 DiskSpaceMBLabel=Необхідно як мінімум [mb] Mб вільного дискового простору.
 CannotInstallToNetworkDrive=Встановлення не може проводитися на мережевий диск.
 CannotInstallToNetworkDrive=Встановлення не може проводитися на мережевий диск.
@@ -151,13 +151,13 @@ InvalidPath=Ви повинні вказати повний шлях з букв
 InvalidDrive=Обраний Вами диск чи мережевий шлях не існує, або не доступний. Будь ласка, виберіть інший.
 InvalidDrive=Обраний Вами диск чи мережевий шлях не існує, або не доступний. Будь ласка, виберіть інший.
 DiskSpaceWarningTitle=Недостатньо дискового простору
 DiskSpaceWarningTitle=Недостатньо дискового простору
 DiskSpaceWarning=Для встановлення необхідно як мінімум %1 Кб вільного простору, а на вибраному диску доступно лише %2 Кб.%n%nВи все одно бажаєте продовжити?
 DiskSpaceWarning=Для встановлення необхідно як мінімум %1 Кб вільного простору, а на вибраному диску доступно лише %2 Кб.%n%nВи все одно бажаєте продовжити?
-DirNameTooLong=Ім'я папки або шлях до неї перевищують допустиму довжину.
-InvalidDirName=Вказане ім’я папки недопустиме.
-BadDirName32=Ім'я папки не може включати наступні символи:%n%n%1
-DirExistsTitle=Папка існує
-DirExists=Папка:%n%n%1%n%nвже існує. Ви все одно бажаєте встановити в цю папку?
-DirDoesntExistTitle=Папка не існує
-DirDoesntExist=Папка:%n%n%1%n%nне існує. Ви бажаєте створити її?
+DirNameTooLong=Ім'я теки або шлях до неї перевищують допустиму довжину.
+InvalidDirName=Вказане ім’я теки недопустиме.
+BadDirName32=Ім'я теки не може включати наступні символи:%n%n%1
+DirExistsTitle=Тека існує
+DirExists=Тека:%n%n%1%n%nвже існує. Ви все одно бажаєте встановити в цю теку?
+DirDoesntExistTitle=Тека не існує
+DirDoesntExist=Тека:%n%n%1%n%nне існує. Ви бажаєте створити її?
 
 
 ; *** "Select Components" wizard page
 ; *** "Select Components" wizard page
 WizardSelectComponents=Вибір компонентів
 WizardSelectComponents=Вибір компонентів
@@ -180,15 +180,15 @@ SelectTasksDesc=Які додаткові завдання ви бажаєте 
 SelectTasksLabel2=Виберіть додаткові завдання які програма встановлення [name] повинна виконати, потім натисніть «Далі».
 SelectTasksLabel2=Виберіть додаткові завдання які програма встановлення [name] повинна виконати, потім натисніть «Далі».
 
 
 ; *** "Select Start Menu Folder" wizard page
 ; *** "Select Start Menu Folder" wizard page
-WizardSelectProgramGroup=Вибір папки в меню «Пуск»
+WizardSelectProgramGroup=Вибір теки в меню «Пуск»
 SelectStartMenuFolderDesc=Де ви бажаєте створити ярлики?
 SelectStartMenuFolderDesc=Де ви бажаєте створити ярлики?
-SelectStartMenuFolderLabel3=Програма встановлення створить ярлики у наступній папці меню «Пуск».
-SelectStartMenuFolderBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу папку, натисніть «Огляд».
-MustEnterGroupName=Ви повинні ввести ім'я папки.
-GroupNameTooLong=Ім’я папки або шлях до неї перевищують допустиму довжину.
-InvalidGroupName=Вказане ім’я папки недопустиме.
-BadGroupName=Ім'я папки не може включати наступні символи:%n%n%1
-NoProgramGroupCheck2=&Не створювати папку в меню «Пуск»
+SelectStartMenuFolderLabel3=Програма встановлення створить ярлики у наступній теці меню «Пуск».
+SelectStartMenuFolderBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу теку, натисніть «Огляд».
+MustEnterGroupName=Ви повинні ввести ім'я теки.
+GroupNameTooLong=Ім’я теки або шлях до неї перевищують допустиму довжину.
+InvalidGroupName=Вказане ім’я теки недопустиме.
+BadGroupName=Ім'я теки не може включати наступні символи:%n%n%1
+NoProgramGroupCheck2=&Не створювати теку в меню «Пуск»
 
 
 ; *** "Ready to Install" wizard page
 ; *** "Ready to Install" wizard page
 WizardReady=Усе готово до встановлення
 WizardReady=Усе готово до встановлення
@@ -199,7 +199,7 @@ ReadyMemoUserInfo=Дані про користувача:
 ReadyMemoDir=Шлях встановлення:
 ReadyMemoDir=Шлях встановлення:
 ReadyMemoType=Тип встановлення:
 ReadyMemoType=Тип встановлення:
 ReadyMemoComponents=Вибрані компоненти:
 ReadyMemoComponents=Вибрані компоненти:
-ReadyMemoGroup=Папка в меню «Пуск»:
+ReadyMemoGroup=Тека в меню «Пуск»:
 ReadyMemoTasks=Додаткові завдання:
 ReadyMemoTasks=Додаткові завдання:
 
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
@@ -214,13 +214,18 @@ ErrorFileHash2=Невірний хеш файлу: очікувався %1, от
 ErrorProgress=Помилка виконання: %1 з %2
 ErrorProgress=Помилка виконання: %1 з %2
 ErrorFileSize=Невірний розмір файлу: очікувався %1, отриманий %2
 ErrorFileSize=Невірний розмір файлу: очікувався %1, отриманий %2
 
 
-; *** TExtractionWizardPage wizard page and Extract7ZipArchive
+; *** TExtractionWizardPage wizard page and ExtractArchive
 ExtractionLabel=Розпакування додаткових файлів...
 ExtractionLabel=Розпакування додаткових файлів...
 ButtonStopExtraction=&Перервати розпакування
 ButtonStopExtraction=&Перервати розпакування
 StopExtraction=Ви дійсно бажаєте перервати розпакування?
 StopExtraction=Ви дійсно бажаєте перервати розпакування?
 ErrorExtractionAborted=Розпакування перервано
 ErrorExtractionAborted=Розпакування перервано
 ErrorExtractionFailed=Помилка розпакування: %1
 ErrorExtractionFailed=Помилка розпакування: %1
 
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=Пароль невірний
+ArchiveIsCorrupted=Архів зіпсований
+ArchiveUnsupportedFormat=Формат архіву не підтримується
+
 ; *** "Preparing to Install" wizard page
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Підготовка до встановлення
 WizardPreparing=Підготовка до встановлення
 PreparingDesc=Програма встановлення готується до встановлення [name] на ваш комп’ютер.
 PreparingDesc=Програма встановлення готується до встановлення [name] на ваш комп’ютер.
@@ -254,9 +259,9 @@ RunEntryShellExec=Переглянути %1
 
 
 ; *** "Setup Needs the Next Disk" stuff
 ; *** "Setup Needs the Next Disk" stuff
 ChangeDiskTitle=Необхідно вставити наступний диск
 ChangeDiskTitle=Необхідно вставити наступний диск
-SelectDiskLabel2=Будь ласка, вставте диск %1 і натисніть «OK».%n%nЯкщо потрібні файли можуть знаходитися в іншій папці, на відміну від вказаної нижче, введіть правильний шлях або натисніть «Огляд».
+SelectDiskLabel2=Будь ласка, вставте диск %1 і натисніть «OK».%n%nЯкщо потрібні файли можуть знаходитися у іншій теці, на відміну від вказаної нижче, введіть правильний шлях або натисніть «Огляд».
 PathLabel=&Шлях:
 PathLabel=&Шлях:
-FileNotInDir2=Файл "%1" не знайдений в "%2". Будь ласка, вставте належний диск або вкажіть іншу папку.
+FileNotInDir2=Файл "%1" не знайдений в "%2". Будь ласка, вставте належний диск або вкажіть іншу теку.
 SelectDirectoryLabel=Будь ласка, вкажіть шлях до наступного диску.
 SelectDirectoryLabel=Будь ласка, вкажіть шлях до наступного диску.
 
 
 ; *** Installation phase messages
 ; *** Installation phase messages
@@ -268,7 +273,7 @@ AbortRetryIgnoreCancel=Відмінити встановлення
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=Закриття програм...
 StatusClosingApplications=Закриття програм...
-StatusCreateDirs=Створення папок...
+StatusCreateDirs=Створення тек...
 StatusExtractFiles=Розпакування файлів...
 StatusExtractFiles=Розпакування файлів...
 StatusCreateIcons=Створення ярликів...
 StatusCreateIcons=Створення ярликів...
 StatusCreateIniEntries=Створення INI записів...
 StatusCreateIniEntries=Створення INI записів...
@@ -295,10 +300,16 @@ ErrorRegWriteKey=Помилка запису в ключ реєстру:%n%1\%2
 ErrorIniEntry=Помилка при створенні запису в INI-файлі "%1".
 ErrorIniEntry=Помилка при створенні запису в INI-файлі "%1".
 
 
 ; *** File copying errors
 ; *** File copying errors
-FileAbortRetryIgnoreSkipNotRecommended=&Пропустити файл (не рекомендується)
+FileAbortRetryIgnoreSkipNotRecommended=&Пропустити цей файл (не рекомендується)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Ігнорувати помилку та продовжити (не рекомендується)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Ігнорувати помилку та продовжити (не рекомендується)
 SourceIsCorrupted=Вихідний файл пошкоджений
 SourceIsCorrupted=Вихідний файл пошкоджений
 SourceDoesntExist=Вихідний файл "%1" не існує
 SourceDoesntExist=Вихідний файл "%1" не існує
+SourceVerificationFailed=Перевірка вихідного файлу не вдалася: %1
+VerificationSignatureDoesntExist=Файл підпису "%1" не існує
+VerificationSignatureInvalid=Файл підпису "%1" є недійсним
+VerificationKeyNotFound=Файл підпису "%1" "%1" використовує невідомий ключ
+VerificationFileSizeIncorrect=Розмір файлу невірний
+VerificationFileHashIncorrect=Хеш файлу невірний
 ExistingFileReadOnly2=Неможливо замінити існуючий файл, оскільки він позначений лише для читання.
 ExistingFileReadOnly2=Неможливо замінити існуючий файл, оскільки він позначений лише для читання.
 ExistingFileReadOnlyRetry=&Видалити атрибут "лише читання" та спробувати знову
 ExistingFileReadOnlyRetry=&Видалити атрибут "лише читання" та спробувати знову
 ExistingFileReadOnlyKeepExisting=&Залишити існуючий файл
 ExistingFileReadOnlyKeepExisting=&Залишити існуючий файл
@@ -314,12 +325,13 @@ ExistingFileNewerOverwriteExisting=&Замінити існуючий файл
 ExistingFileNewerKeepExisting=&Зберегти існуючий файл (рекомендується)
 ExistingFileNewerKeepExisting=&Зберегти існуючий файл (рекомендується)
 ExistingFileNewerOverwriteOrKeepAll=&Повторити дію для всіх подальших конфліктів
 ExistingFileNewerOverwriteOrKeepAll=&Повторити дію для всіх подальших конфліктів
 ErrorChangingAttr=Виникла помилка при спробі зміни атрибутів існуючого файлу:
 ErrorChangingAttr=Виникла помилка при спробі зміни атрибутів існуючого файлу:
-ErrorCreatingTemp=Виникла помилка при спробі створення файлу в папці встановлення:
+ErrorCreatingTemp=Виникла помилка при спробі створення файлу у теці встановлення:
 ErrorReadingSource=Виникла помилка при спробі читання вихідного файлу:
 ErrorReadingSource=Виникла помилка при спробі читання вихідного файлу:
 ErrorCopying=Виникла помилка при спробі копіювання файлу:
 ErrorCopying=Виникла помилка при спробі копіювання файлу:
+ErrorExtracting=Виникла помилка при спробі розпакування архіву:
 ErrorReplacingExistingFile=Виникла помилка при спробі заміни існуючого файлу:
 ErrorReplacingExistingFile=Виникла помилка при спробі заміни існуючого файлу:
 ErrorRestartReplace=Помилка RestartReplace:
 ErrorRestartReplace=Помилка RestartReplace:
-ErrorRenamingTemp=Виникла помилка при спробі перейменування файлу в папці встановлення:
+ErrorRenamingTemp=Виникла помилка при спробі перейменування файлу у теці встановлення:
 ErrorRegisterServer=Неможливо зареєструвати DLL/OCX: %1
 ErrorRegisterServer=Неможливо зареєструвати DLL/OCX: %1
 ErrorRegSvr32Failed=Помилка при виконанні RegSvr32, код повернення %1
 ErrorRegSvr32Failed=Помилка при виконанні RegSvr32, код повернення %1
 ErrorRegisterTypeLib=Неможливо зареєструвати бібліотеку типів: %1
 ErrorRegisterTypeLib=Неможливо зареєструвати бібліотеку типів: %1
@@ -348,7 +360,7 @@ UninstallOnlyOnWin64=Цю програму можливо видалити ли
 OnlyAdminCanUninstall=Ця програма може бути видалена лише користувачем з правами адміністратора.
 OnlyAdminCanUninstall=Ця програма може бути видалена лише користувачем з правами адміністратора.
 UninstallStatusLabel=Будь ласка, зачекайте, поки %1 видалиться з вашого комп'ютера.
 UninstallStatusLabel=Будь ласка, зачекайте, поки %1 видалиться з вашого комп'ютера.
 UninstalledAll=%1 успішно видалено з вашого комп'ютера.
 UninstalledAll=%1 успішно видалено з вашого комп'ютера.
-UninstalledMost=Видалення %1 завершено.%n%nДеякі елемент неможливо видалити. Ви можете видалити їх вручну.
+UninstalledMost=Видалення %1 завершено.%n%nДеякі елементи неможливо видалити. Ви можете видалити їх вручну.
 UninstalledAndNeedsRestart=Для завершення видалення %1 необхідно перезавантажити ваш комп’ютер.%n%nПерезавантажити комп’ютер зараз?
 UninstalledAndNeedsRestart=Для завершення видалення %1 необхідно перезавантажити ваш комп’ютер.%n%nПерезавантажити комп’ютер зараз?
 UninstallDataCorrupted=Файл "%1" пошкоджений. Видалення неможливе
 UninstallDataCorrupted=Файл "%1" пошкоджений. Видалення неможливе
 
 
@@ -380,4 +392,4 @@ AssocFileExtension=&Асоціювати %1 з розширенням файлу
 AssocingFileExtension=Асоціювання %1 з розширенням файлу %2...
 AssocingFileExtension=Асоціювання %1 з розширенням файлу %2...
 AutoStartProgramGroupDescription=Автозавантаження:
 AutoStartProgramGroupDescription=Автозавантаження:
 AutoStartProgram=Автоматично завантажувати %1
 AutoStartProgram=Автоматично завантажувати %1
-AddonHostProgramNotFound=%1 не знайдений у вказаній вами папці%n%nВи все одно бажаєте продовжити?
+AddonHostProgramNotFound=%1 не знайдений у вказаній вами теці%n%nВи все одно бажаєте продовжити?

+ 19 - 19
ISHelp/isetup.xml

@@ -219,7 +219,7 @@ Includes integrated support for "deflate", bzip2, and 7-Zip LZMA/LZMA2 file <lin
 AppName=My Program
 AppName=My Program
 
 
 [Files]
 [Files]
-Source: "MYPROG.EXE"; DestDir: "{app}"
+Source: "MyProg.exe"; DestDir: "{app}"
 </precode>
 </precode>
 
 
 <p>Note that it is legal to specify multiple sections of the same name.</p>
 <p>Note that it is legal to specify multiple sections of the same name.</p>
@@ -288,9 +288,9 @@ Source: "MYPROG.EXE"; DestDir: "{app}"
 
 
 <precode>
 <precode>
 [Files]
 [Files]
-Source: "MYPROG.EXE"; DestDir: "{app}"
-Source: "MYPROG.CHM"; DestDir: "{app}"
-Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
 </precode>
 </precode>
 
 
 <p>Each parameter consists of a name, followed by a colon, and then a value. Unless otherwise noted, parameters are optional in that they assume a default value if they are not specified. Multiple parameters on a line are separated by semicolons, and can be listed in any order.</p>
 <p>Each parameter consists of a name, followed by a colon, and then a value. Unless otherwise noted, parameters are optional in that they assume a default value if they are not specified. Multiple parameters on a line are separated by semicolons, and can be listed in any order.</p>
@@ -424,7 +424,7 @@ This " contains " embedded " quotes
 <dt><b><a name="app">{app}</a></b></dt>
 <dt><b><a name="app">{app}</a></b></dt>
 <dd>
 <dd>
 <p>The application directory, which the user selects on the <i>Select Destination Location</i> page of the wizard.<br/>
 <p>The application directory, which the user selects on the <i>Select Destination Location</i> page of the wizard.<br/>
-For example: If you used <tt>{app}\MYPROG.EXE</tt> on an entry and the user selected "C:\MYPROG" as the application directory, Setup will translate it to "C:\MYPROG\MYPROG.EXE".</p>
+For example: If you used <tt>{app}\MyProg.exe</tt> on an entry and the user selected "C:\MYPROG" as the application directory, Setup will translate it to "C:\MYPROG\MyProg.exe".</p>
 </dd>
 </dd>
 
 
 <dt><b><a name="win">{win}</a></b></dt>
 <dt><b><a name="win">{win}</a></b></dt>
@@ -454,7 +454,7 @@ For example: If you used <tt>{sys}\CTL3D32.DLL</tt> on an entry and the system's
 <dt><b><a name="src">{src}</a></b></dt>
 <dt><b><a name="src">{src}</a></b></dt>
 <dd>
 <dd>
 <p>The directory in which the Setup files are located.<br/>
 <p>The directory in which the Setup files are located.<br/>
-For example: If you used <tt>{src}\MYPROG.EXE</tt> on an entry and the user is installing from "S:\", Setup will translate it to "S:\MYPROG.EXE".</p>
+For example: If you used <tt>{src}\MyProg.exe</tt> on an entry and the user is installing from "S:\", Setup will translate it to "S:\MyProg.exe".</p>
 </dd>
 </dd>
 
 
 <dt><b><a name="sd">{sd}</a></b></dt>
 <dt><b><a name="sd">{sd}</a></b></dt>
@@ -916,9 +916,9 @@ For example: If you used <tt>{src}\MYPROG.EXE</tt> on an entry and the user is i
 <example>
 <example>
 <pre>
 <pre>
 [Files]
 [Files]
-Source: "MYPROG.EXE"; DestDir: "{app}"; Components: main
-Source: "MYPROG.CHM"; DestDir: "{app}"; Components: help
-Source: "README.TXT"; DestDir: "{app}"
+Source: "MyProg.exe"; DestDir: "{app}"; Components: main
+Source: "MyProg.chm"; DestDir: "{app}"; Components: help
+Source: "Readme.txt"; DestDir: "{app}"
 </pre>
 </pre>
 </example>
 </example>
 </param>
 </param>
@@ -1541,9 +1541,9 @@ Name: "{app}\bin"
 
 
 <precode>
 <precode>
 [Files]
 [Files]
-Source: "MYPROG.EXE"; DestDir: "{app}"
-Source: "MYPROG.CHM"; DestDir: "{app}"
-Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
 </precode>
 </precode>
 
 
 <p>See the <i>Remarks</i> section at the bottom of this topic for some important notes.</p>
 <p>See the <i>Remarks</i> section at the bottom of this topic for some important notes.</p>
@@ -1560,7 +1560,7 @@ Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
 <p>Constants may only be used when the <tt>external</tt> flag is specified, because the compiler does not do any constant translating itself.</p>
 <p>Constants may only be used when the <tt>external</tt> flag is specified, because the compiler does not do any constant translating itself.</p>
 <examples>
 <examples>
 <pre>
 <pre>
-Source: "MYPROG.EXE"
+Source: "MyProg.exe"
 Source: "Files\*"
 Source: "Files\*"
 </pre>
 </pre>
 </examples>
 </examples>
@@ -1666,7 +1666,7 @@ ExternalSize: 1_048_576; Flags: external
 </param>
 </param>
 
 
 <param name="ExtractArchivePassword">
 <param name="ExtractArchivePassword">
-<p>Specifies the password of the archive. Please be aware that this password is stored in an unencrypted form in the resulting Setup file(s), even if you have enabled encryption (using the [Setup] section directive <tt>Encryption</tt>).</p>
+<p>Specifies the password of the archive, which can include constants. Please be aware that this password is stored in an unencrypted form in the resulting Setup file(s), even if you have enabled encryption (using the [Setup] section directive <tt>Encryption</tt>).</p>
 <p>This parameter is ignored if the <tt>extractarchive</tt> flag isn't also specified.</p>
 <p>This parameter is ignored if the <tt>extractarchive</tt> flag isn't also specified.</p>
 </param>
 </param>
 
 
@@ -1921,7 +1921,7 @@ Instructs Setup to proceed to comparing time stamps (last write/modified time) i
 
 
 <precode>
 <precode>
 [Icons]
 [Icons]
-Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; WorkingDir: "{app}"
 Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"
 Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"
 </precode>
 </precode>
 
 
@@ -1949,7 +1949,7 @@ Name: "{commonstartup}\My Program"
 <p>On 64-bit Windows, note that the <tt>{sys}</tt> constant will map to the native 64-bit System directory when the shortcut is launched by a 64-bit process, such as Windows Explorer. This is true regardless of whether the install is running in <link topic="32vs64bitinstalls">64-bit install mode</link>. To create a shortcut that always points to the 32-bit System directory, use <tt>{syswow64}</tt> instead. (The same applies to the <tt>WorkingDir</tt> and <tt>IconFilename</tt> parameters.)</p>
 <p>On 64-bit Windows, note that the <tt>{sys}</tt> constant will map to the native 64-bit System directory when the shortcut is launched by a 64-bit process, such as Windows Explorer. This is true regardless of whether the install is running in <link topic="32vs64bitinstalls">64-bit install mode</link>. To create a shortcut that always points to the 32-bit System directory, use <tt>{syswow64}</tt> instead. (The same applies to the <tt>WorkingDir</tt> and <tt>IconFilename</tt> parameters.)</p>
 <examples>
 <examples>
 <pre>
 <pre>
-Filename: "{app}\MYPROG.EXE"
+Filename: "{app}\MyProg.exe"
 Filename: "{uninstallexe}"
 Filename: "{uninstallexe}"
 Filename: "{app}\FolderName"
 Filename: "{app}\FolderName"
 Filename: "http://www.example.com/"
 Filename: "http://www.example.com/"
@@ -2622,9 +2622,9 @@ If <tt>binary</tt> is specified, Setup will create a binary (REG_BINARY) value.<
 
 
 <precode>
 <precode>
 [Run]
 [Run]
-Filename: "{app}\INIT.EXE"; Parameters: "/x"
-Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent
-Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked
+Filename: "{app}\Init.exe"; Parameters: "/x"
+Filename: "{app}\Readme.txt"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent
+Filename: "{app}\MyProg.exe"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked
 </precode>
 </precode>
 
 
 <p>The following is a list of the supported <link topic="params">parameters</link>:</p>
 <p>The following is a list of the supported <link topic="params">parameters</link>:</p>

+ 2 - 1
Projects/Src/Compiler.SetupCompiler.pas

@@ -5521,7 +5521,8 @@ begin
         CheckCheckOrInstall(ParamCommonCheck, Check, cikCheck);
         CheckCheckOrInstall(ParamCommonCheck, Check, cikCheck);
         CheckCheckOrInstall(ParamCommonBeforeInstall, BeforeInstall, cikInstall);
         CheckCheckOrInstall(ParamCommonBeforeInstall, BeforeInstall, cikInstall);
         CheckCheckOrInstall(ParamCommonAfterInstall, AfterInstall, cikInstall);
         CheckCheckOrInstall(ParamCommonAfterInstall, AfterInstall, cikInstall);
-      end;
+        CheckConst(ExtractArchivePassword, MinVersion, []);
+     end;
 
 
       FileList := TList.Create();
       FileList := TList.Create();
       DirList := TList.Create();
       DirList := TList.Create();

+ 4 - 3
Projects/Src/Setup.Install.pas

@@ -1995,7 +1995,7 @@ var
     end;
     end;
 
 
     function RecurseExternalArchiveCopyFiles(const DisableFsRedir: Boolean;
     function RecurseExternalArchiveCopyFiles(const DisableFsRedir: Boolean;
-      const ArchiveFilename, Password: String; const Excludes: TStrings;
+      const ArchiveFilename: String; const Excludes: TStrings;
       const CurFile: PSetupFileEntry; var ExpectedBytesLeft: Integer64;
       const CurFile: PSetupFileEntry; var ExpectedBytesLeft: Integer64;
       var ConfirmOverwriteOverwriteAll, PromptIfOlderOverwriteAll: TOverwriteAll;
       var ConfirmOverwriteOverwriteAll, PromptIfOlderOverwriteAll: TOverwriteAll;
       var WarnedPerUserFonts: Boolean): Boolean;
       var WarnedPerUserFonts: Boolean): Boolean;
@@ -2036,7 +2036,8 @@ var
             end;
             end;
 
 
             H := ArchiveFindFirstFileRedir(DisableFsRedir, ArchiveFilename, DestDir,
             H := ArchiveFindFirstFileRedir(DisableFsRedir, ArchiveFilename, DestDir,
-              Password, foRecurseSubDirsExternal in CurFile^.Options, True, FindData);
+              ExpandConst(CurFile^.ExtractArchivePassword), foRecurseSubDirsExternal in CurFile^.Options,
+              True, FindData);
             Failed := '';
             Failed := '';
           except
           except
             if ExceptObject is EAbort then
             if ExceptObject is EAbort then
@@ -2162,7 +2163,7 @@ var
                 FoundFiles := True;
                 FoundFiles := True;
               end else if foExtractArchive in CurFile^.Options then
               end else if foExtractArchive in CurFile^.Options then
                 FoundFiles := RecurseExternalArchiveCopyFiles(DisableFsRedir,
                 FoundFiles := RecurseExternalArchiveCopyFiles(DisableFsRedir,
-                  SourceWildcard, CurFile^.ExtractArchivePassword, Excludes, CurFile,
+                  SourceWildcard, Excludes, CurFile,
                   ExpectedBytesLeft, ConfirmOverwriteOverwriteAll, PromptIfOlderOverwriteAll,
                   ExpectedBytesLeft, ConfirmOverwriteOverwriteAll, PromptIfOlderOverwriteAll,
                   WarnedPerUserFonts)
                   WarnedPerUserFonts)
               else
               else

+ 18 - 17
Projects/Src/Setup.MainFunc.pas

@@ -1804,7 +1804,7 @@ function EnumFiles(const EnumFilesProc: TEnumFilesProc;
   end;
   end;
 
 
   function RecurseExternalArchiveFiles(const DisableFsRedir: Boolean;
   function RecurseExternalArchiveFiles(const DisableFsRedir: Boolean;
-    const ArchiveFilename, Password: String; const Excludes: TStrings;
+    const ArchiveFilename: String; const Excludes: TStrings;
     const CurFile: PSetupFileEntry): Boolean;
     const CurFile: PSetupFileEntry): Boolean;
   begin
   begin
     { See above }
     { See above }
@@ -1816,7 +1816,8 @@ function EnumFiles(const EnumFilesProc: TEnumFilesProc;
 
 
     var FindData: TWin32FindData;
     var FindData: TWin32FindData;
     var H := ArchiveFindFirstFileRedir(DisableFsRedir, ArchiveFilename, DestDir,
     var H := ArchiveFindFirstFileRedir(DisableFsRedir, ArchiveFilename, DestDir,
-      Password, foRecurseSubDirsExternal in CurFile^.Options, False, FindData);
+      ExpandConst(CurFile^.ExtractArchivePassword), foRecurseSubDirsExternal in CurFile^.Options,
+      False, FindData);
     if H <> INVALID_HANDLE_VALUE then begin
     if H <> INVALID_HANDLE_VALUE then begin
       try
       try
         repeat
         repeat
@@ -1871,20 +1872,20 @@ begin
             if not EnumFilesProc(DisableFsRedir, ExpandConst(CurFile^.DestName), Param) then
             if not EnumFilesProc(DisableFsRedir, ExpandConst(CurFile^.DestName), Param) then
               Exit(False);
               Exit(False);
           end else begin
           end else begin
-            SourceWildcard := ExpandConst(CurFile^.SourceFilename);
-            Excludes.DelimitedText := CurFile^.Excludes;
-            if foExtractArchive in CurFile^.Options then begin
-              try
-                if not RecurseExternalArchiveFiles(DisableFsRedir, SourceWildcard,
-                   CurFile^.ExtractArchivePassword, Excludes, CurFile) then
-                  Exit(False);
-              except on E: ESevenZipError do
-                { Ignore archive errors for now, will show up with proper UI during
-                  installation }
-              end;
-            end else begin
-              if not RecurseExternalFiles(DisableFsRedir, PathExtractPath(SourceWildcard), '',
-                 PathExtractName(SourceWildcard), IsWildcard(SourceWildcard), Excludes, CurFile) then
+	          SourceWildcard := ExpandConst(CurFile^.SourceFilename);
+	          Excludes.DelimitedText := CurFile^.Excludes;
+	          if foExtractArchive in CurFile^.Options then begin
+	            try
+	              if not RecurseExternalArchiveFiles(DisableFsRedir, SourceWildcard,
+	                 Excludes, CurFile) then
+	                Exit(False);
+	            except on E: ESevenZipError do
+	              { Ignore archive errors for now, will show up with proper UI during
+	                installation }
+	            end;
+	          end else begin
+	            if not RecurseExternalFiles(DisableFsRedir, PathExtractPath(SourceWildcard), '',
+	               PathExtractName(SourceWildcard), IsWildcard(SourceWildcard), Excludes, CurFile) then
                 Exit(False);
                 Exit(False);
             end;
             end;
           end;
           end;
@@ -3531,7 +3532,7 @@ begin
               if foExtractArchive in Options then begin
               if foExtractArchive in Options then begin
                 ExternalSize := RecurseExternalArchiveGetSizeOfFiles(
                 ExternalSize := RecurseExternalArchiveGetSizeOfFiles(
                   ShouldDisableFsRedirForFileEntry(PSetupFileEntry(Entries[seFile][I])),
                   ShouldDisableFsRedirForFileEntry(PSetupFileEntry(Entries[seFile][I])),
-                  ExpandConst(SourceFilename), ExtractArchivePassword, LExcludes,
+                  ExpandConst(SourceFilename), ExpandConst(ExtractArchivePassword), LExcludes,
                   foRecurseSubDirsExternal in Options);
                   foRecurseSubDirsExternal in Options);
               end else begin
               end else begin
                 if FileType <> ftUserFile then
                 if FileType <> ftUserFile then