Forráskód Böngészése

Merge branch 'main' into files-download

# Conflicts:
#	Projects/Src/Setup.MainFunc.pas
Martijn Laan 3 hónapja
szülő
commit
eb7f104e80

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

@@ -2,6 +2,7 @@ name: build
 
 on:
   push:
+  workflow_dispatch:
 
 env:
   HOME: "${{github.workspace}}\\home"
@@ -29,25 +30,6 @@ jobs:
           Remove-Item issrc-build-env.zip
           $DELPHIXEROOT = (Get-Item .\issrc-build-env).FullName
           "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
         run: |
           "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 HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii ISHelp\compilesettings.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
         run: |
           copy license.txt Files
           copy license.txt Output
           copy license.txt ISHelp/Staging
       - name: upload Files
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: Files
-          path: Files
+          path: Files/
       - name: upload installer
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: Output
-          path: Output
+          path: Output/
       - name: upload ISHelp
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: ISHelp
-          path: ISHelp/Staging
+          path: ISHelp/Staging/
       - name: find mt.exe
         shell: bash
         run: |
@@ -114,10 +92,10 @@ jobs:
           ./Procmon.exe -Terminate -Quiet &&
           powershell -command 'start-process -NoNewWindow -Wait -FilePath .\Procmon.exe -ArgumentList "-OpenLog trace\procmon.pml -SaveAs trace\procmon.csv"'
       - name: upload trace
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: trace
-          path: trace
+          path: trace/
       - name: check trace
         shell: bash
         run: |

+ 16 - 2
Files/Languages/Italian.isl

@@ -1,5 +1,5 @@
 ; [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:
 ;    https://jrsoftware.org/files/istrans/
@@ -20,6 +20,8 @@
 ; understand the '[LangOptions] section' topic in the help file.
 LanguageName=Italiano
 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
 ; If the language you are translating to requires special font faces or
 ; sizes, uncomment any of the following entries and change them accordingly.
@@ -91,7 +93,7 @@ AboutSetupMenuItem=&Informazioni sull'installazione...
 AboutSetupTitle=Informazioni sull'installazione
 AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4
 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
 ButtonBack=< &Indietro
@@ -236,6 +238,11 @@ StopExtraction=Sei sicuro di voler interrompere l'estrazione?
 ErrorExtractionAborted=Estrazione interrotta
 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
 WizardPreparing=Preparazione all'installazione
 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)
 SourceIsCorrupted=Il file sorgente è danneggiato
 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.
 ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova
 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:
 ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente:
 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:
 ErrorRestartReplace=Errore durante riavvio o sostituzione:
 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
 ; E-Mail: [email protected]
 ; Please report all spelling/grammar errors, and observations.
 ; 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]
 ; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
 ; Версія перекладу 2020.08.04
-; Оновлено та переглянуто 24.12.2024, Сергій Леонов ([email protected])
+; Оновлено та переглянуто 08.06.2025, Сергій Леонов ([email protected])
 
 [LangOptions]
 LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
@@ -33,12 +33,12 @@ ErrorTitle=Помилка
 ; *** SetupLdr messages
 SetupLdrStartupMessage=Ця програма встановить %1 на ваш комп'ютер, бажаєте продовжити?
 LdrCannotCreateTemp=Неможливо створити тимчасовий файл. Встановлення перервано
-LdrCannotExecTemp=Неможливо виконати файл в тимчасовій папці. Встановлення перервано
+LdrCannotExecTemp=Неможливо виконати файл у тимчасовій теці. Встановлення перервано
 HelpTextNote=
 
 ; *** Startup error messages
 LastErrorMessage=%1.%n%nПомилка %2: %3
-SetupFileMissing=Файл %1 відсутній в папці встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
+SetupFileMissing=Файл %1 відсутній у теці встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
 SetupFileCorrupt=Файли встановлення пошкоджені. Будь ласка, отримайте нову копію програми.
 SetupFileCorruptOrWrongVer=Файли встановлення пошкоджені або несумісні з цією версією програми встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
 InvalidParameter=Командний рядок містить недопустимий параметр:%n%n%1
@@ -66,8 +66,8 @@ PrivilegesRequiredOverrideCurrentUser=Встановити тільки для 
 PrivilegesRequiredOverrideCurrentUserRecommended=Встановити тільки для &мене (рекомендується)
 
 ; *** Misc. errors
-ErrorCreatingDir=Програмі встановлення не вдалося створити папку "%1"
-ErrorTooManyFilesInDir=Програмі встановлення не вдалося створити файл в папці "%1", тому що в ньому занадто багато файлів
+ErrorCreatingDir=Програмі встановлення не вдалося створити теку "%1"
+ErrorTooManyFilesInDir=Програмі встановлення не вдалося створити файл у теці "%1", тому що в ньому занадто багато файлів
 
 ; *** Setup common messages
 ExitSetupTitle=Вихід з програми встановлення
@@ -91,7 +91,7 @@ ButtonNoToAll=Н&і для Всіх
 ButtonFinish=&Готово
 ButtonBrowse=&Огляд...
 ButtonWizardBrowse=О&гляд...
-ButtonNewFolder=&Створити папку
+ButtonNewFolder=&Створити теку
 
 ; *** "Select Language" dialog messages
 SelectLanguageTitle=Виберіть мову встановлення
@@ -100,9 +100,9 @@ SelectLanguageLabel=Виберіть мову, яка буде використ
 ; *** Common wizard text
 ClickNext=Натисніть «Далі», щоб продовжити, або «Скасувати» для виходу з програми встановлення.
 BeveledLabel=
-BrowseDialogTitle=Огляд папок
-BrowseDialogLabel=Виберіть папку зі списку та натисніть «ОК».
-NewFolderName=Нова папка
+BrowseDialogTitle=Огляд тек
+BrowseDialogLabel=Виберіть теку зі списку та натисніть «ОК».
+NewFolderName=Нова тека
 
 ; *** "Welcome" wizard page
 WelcomeLabel1=Ласкаво просимо до програми встановлення [name]
@@ -141,8 +141,8 @@ UserInfoNameRequired=Ви повинні ввести ім'я.
 ; *** "Select Destination Location" wizard page
 WizardSelectDir=Вибір шляху встановлення
 SelectDirDesc=Куди ви бажаєте встановити [name]?
-SelectDirLabel3=Програма встановить [name] у наступну папку.
-SelectDirBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу папку, натисніть «Огляд».
+SelectDirLabel3=Програма встановить [name] у наступну теку.
+SelectDirBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу теку, натисніть «Огляд».
 DiskSpaceGBLabel=Необхідно як мінімум [gb] Гб вільного дискового простору.
 DiskSpaceMBLabel=Необхідно як мінімум [mb] Mб вільного дискового простору.
 CannotInstallToNetworkDrive=Встановлення не може проводитися на мережевий диск.
@@ -151,13 +151,13 @@ InvalidPath=Ви повинні вказати повний шлях з букв
 InvalidDrive=Обраний Вами диск чи мережевий шлях не існує, або не доступний. Будь ласка, виберіть інший.
 DiskSpaceWarningTitle=Недостатньо дискового простору
 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
 WizardSelectComponents=Вибір компонентів
@@ -180,15 +180,15 @@ SelectTasksDesc=Які додаткові завдання ви бажаєте 
 SelectTasksLabel2=Виберіть додаткові завдання які програма встановлення [name] повинна виконати, потім натисніть «Далі».
 
 ; *** "Select Start Menu Folder" wizard page
-WizardSelectProgramGroup=Вибір папки в меню «Пуск»
+WizardSelectProgramGroup=Вибір теки в меню «Пуск»
 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
 WizardReady=Усе готово до встановлення
@@ -199,7 +199,7 @@ ReadyMemoUserInfo=Дані про користувача:
 ReadyMemoDir=Шлях встановлення:
 ReadyMemoType=Тип встановлення:
 ReadyMemoComponents=Вибрані компоненти:
-ReadyMemoGroup=Папка в меню «Пуск»:
+ReadyMemoGroup=Тека в меню «Пуск»:
 ReadyMemoTasks=Додаткові завдання:
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
@@ -214,13 +214,18 @@ ErrorFileHash2=Невірний хеш файлу: очікувався %1, от
 ErrorProgress=Помилка виконання: %1 з %2
 ErrorFileSize=Невірний розмір файлу: очікувався %1, отриманий %2
 
-; *** TExtractionWizardPage wizard page and Extract7ZipArchive
+; *** TExtractionWizardPage wizard page and ExtractArchive
 ExtractionLabel=Розпакування додаткових файлів...
 ButtonStopExtraction=&Перервати розпакування
 StopExtraction=Ви дійсно бажаєте перервати розпакування?
 ErrorExtractionAborted=Розпакування перервано
 ErrorExtractionFailed=Помилка розпакування: %1
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=Пароль невірний
+ArchiveIsCorrupted=Архів зіпсований
+ArchiveUnsupportedFormat=Формат архіву не підтримується
+
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Підготовка до встановлення
 PreparingDesc=Програма встановлення готується до встановлення [name] на ваш комп’ютер.
@@ -254,9 +259,9 @@ RunEntryShellExec=Переглянути %1
 
 ; *** "Setup Needs the Next Disk" stuff
 ChangeDiskTitle=Необхідно вставити наступний диск
-SelectDiskLabel2=Будь ласка, вставте диск %1 і натисніть «OK».%n%nЯкщо потрібні файли можуть знаходитися в іншій папці, на відміну від вказаної нижче, введіть правильний шлях або натисніть «Огляд».
+SelectDiskLabel2=Будь ласка, вставте диск %1 і натисніть «OK».%n%nЯкщо потрібні файли можуть знаходитися у іншій теці, на відміну від вказаної нижче, введіть правильний шлях або натисніть «Огляд».
 PathLabel=&Шлях:
-FileNotInDir2=Файл "%1" не знайдений в "%2". Будь ласка, вставте належний диск або вкажіть іншу папку.
+FileNotInDir2=Файл "%1" не знайдений в "%2". Будь ласка, вставте належний диск або вкажіть іншу теку.
 SelectDirectoryLabel=Будь ласка, вкажіть шлях до наступного диску.
 
 ; *** Installation phase messages
@@ -268,7 +273,7 @@ AbortRetryIgnoreCancel=Відмінити встановлення
 
 ; *** Installation status messages
 StatusClosingApplications=Закриття програм...
-StatusCreateDirs=Створення папок...
+StatusCreateDirs=Створення тек...
 StatusExtractFiles=Розпакування файлів...
 StatusCreateIcons=Створення ярликів...
 StatusCreateIniEntries=Створення INI записів...
@@ -295,10 +300,16 @@ ErrorRegWriteKey=Помилка запису в ключ реєстру:%n%1\%2
 ErrorIniEntry=Помилка при створенні запису в INI-файлі "%1".
 
 ; *** File copying errors
-FileAbortRetryIgnoreSkipNotRecommended=&Пропустити файл (не рекомендується)
+FileAbortRetryIgnoreSkipNotRecommended=&Пропустити цей файл (не рекомендується)
 FileAbortRetryIgnoreIgnoreNotRecommended=&Ігнорувати помилку та продовжити (не рекомендується)
 SourceIsCorrupted=Вихідний файл пошкоджений
 SourceDoesntExist=Вихідний файл "%1" не існує
+SourceVerificationFailed=Перевірка вихідного файлу не вдалася: %1
+VerificationSignatureDoesntExist=Файл підпису "%1" не існує
+VerificationSignatureInvalid=Файл підпису "%1" є недійсним
+VerificationKeyNotFound=Файл підпису "%1" "%1" використовує невідомий ключ
+VerificationFileSizeIncorrect=Розмір файлу невірний
+VerificationFileHashIncorrect=Хеш файлу невірний
 ExistingFileReadOnly2=Неможливо замінити існуючий файл, оскільки він позначений лише для читання.
 ExistingFileReadOnlyRetry=&Видалити атрибут "лише читання" та спробувати знову
 ExistingFileReadOnlyKeepExisting=&Залишити існуючий файл
@@ -314,12 +325,13 @@ ExistingFileNewerOverwriteExisting=&Замінити існуючий файл
 ExistingFileNewerKeepExisting=&Зберегти існуючий файл (рекомендується)
 ExistingFileNewerOverwriteOrKeepAll=&Повторити дію для всіх подальших конфліктів
 ErrorChangingAttr=Виникла помилка при спробі зміни атрибутів існуючого файлу:
-ErrorCreatingTemp=Виникла помилка при спробі створення файлу в папці встановлення:
+ErrorCreatingTemp=Виникла помилка при спробі створення файлу у теці встановлення:
 ErrorReadingSource=Виникла помилка при спробі читання вихідного файлу:
 ErrorCopying=Виникла помилка при спробі копіювання файлу:
+ErrorExtracting=Виникла помилка при спробі розпакування архіву:
 ErrorReplacingExistingFile=Виникла помилка при спробі заміни існуючого файлу:
 ErrorRestartReplace=Помилка RestartReplace:
-ErrorRenamingTemp=Виникла помилка при спробі перейменування файлу в папці встановлення:
+ErrorRenamingTemp=Виникла помилка при спробі перейменування файлу у теці встановлення:
 ErrorRegisterServer=Неможливо зареєструвати DLL/OCX: %1
 ErrorRegSvr32Failed=Помилка при виконанні RegSvr32, код повернення %1
 ErrorRegisterTypeLib=Неможливо зареєструвати бібліотеку типів: %1
@@ -348,7 +360,7 @@ UninstallOnlyOnWin64=Цю програму можливо видалити ли
 OnlyAdminCanUninstall=Ця програма може бути видалена лише користувачем з правами адміністратора.
 UninstallStatusLabel=Будь ласка, зачекайте, поки %1 видалиться з вашого комп'ютера.
 UninstalledAll=%1 успішно видалено з вашого комп'ютера.
-UninstalledMost=Видалення %1 завершено.%n%nДеякі елемент неможливо видалити. Ви можете видалити їх вручну.
+UninstalledMost=Видалення %1 завершено.%n%nДеякі елементи неможливо видалити. Ви можете видалити їх вручну.
 UninstalledAndNeedsRestart=Для завершення видалення %1 необхідно перезавантажити ваш комп’ютер.%n%nПерезавантажити комп’ютер зараз?
 UninstallDataCorrupted=Файл "%1" пошкоджений. Видалення неможливе
 
@@ -380,4 +392,4 @@ AssocFileExtension=&Асоціювати %1 з розширенням файлу
 AssocingFileExtension=Асоціювання %1 з розширенням файлу %2...
 AutoStartProgramGroupDescription=Автозавантаження:
 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
 
 [Files]
-Source: "MYPROG.EXE"; DestDir: "{app}"
+Source: "MyProg.exe"; DestDir: "{app}"
 </precode>
 
 <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>
 [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>
 
 <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>
 <dd>
 <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>
 
 <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>
 <dd>
 <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>
 
 <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>
 <pre>
 [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>
 </example>
 </param>
@@ -1541,9 +1541,9 @@ Name: "{app}\bin"
 
 <precode>
 [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>
 
 <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>
 <examples>
 <pre>
-Source: "MYPROG.EXE"
+Source: "MyProg.exe"
 Source: "Files\*"
 </pre>
 </examples>
@@ -1666,7 +1666,7 @@ ExternalSize: 1_048_576; Flags: external
 </param>
 
 <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>
 </param>
 
@@ -1921,7 +1921,7 @@ Instructs Setup to proceed to comparing time stamps (last write/modified time) i
 
 <precode>
 [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}"
 </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>
 <examples>
 <pre>
-Filename: "{app}\MYPROG.EXE"
+Filename: "{app}\MyProg.exe"
 Filename: "{uninstallexe}"
 Filename: "{app}\FolderName"
 Filename: "http://www.example.com/"
@@ -2622,9 +2622,9 @@ If <tt>binary</tt> is specified, Setup will create a binary (REG_BINARY) value.<
 
 <precode>
 [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>
 
 <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(ParamCommonBeforeInstall, BeforeInstall, cikInstall);
         CheckCheckOrInstall(ParamCommonAfterInstall, AfterInstall, cikInstall);
-      end;
+        CheckConst(ExtractArchivePassword, MinVersion, []);
+     end;
 
       FileList := TList.Create();
       DirList := TList.Create();

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

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

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

@@ -1804,7 +1804,7 @@ function EnumFiles(const EnumFilesProc: TEnumFilesProc;
   end;
 
   function RecurseExternalArchiveFiles(const DisableFsRedir: Boolean;
-    const ArchiveFilename, Password: String; const Excludes: TStrings;
+    const ArchiveFilename: String; const Excludes: TStrings;
     const CurFile: PSetupFileEntry): Boolean;
   begin
     { See above }
@@ -1816,7 +1816,8 @@ function EnumFiles(const EnumFilesProc: TEnumFilesProc;
 
     var FindData: TWin32FindData;
     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
       try
         repeat
@@ -1871,20 +1872,20 @@ begin
             if not EnumFilesProc(DisableFsRedir, ExpandConst(CurFile^.DestName), Param) then
               Exit(False);
           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);
             end;
           end;
@@ -3531,7 +3532,7 @@ begin
               if foExtractArchive in Options then begin
                 ExternalSize := RecurseExternalArchiveGetSizeOfFiles(
                   ShouldDisableFsRedirForFileEntry(PSetupFileEntry(Entries[seFile][I])),
-                  ExpandConst(SourceFilename), ExtractArchivePassword, LExcludes,
+                  ExpandConst(SourceFilename), ExpandConst(ExtractArchivePassword), LExcludes,
                   foRecurseSubDirsExternal in Options);
               end else begin
                 if FileType <> ftUserFile then