├── .github └── FUNDING.yml ├── .gitignore ├── build.bat ├── compile.bat ├── isdonate.bmp ├── isdonateandmail.iss ├── isfiles ├── Compil32.exe ├── Default.isl ├── Examples │ ├── 64Bit.iss │ ├── 64BitThreeArch.iss │ ├── 64BitTwoArch.iss │ ├── AllPagesExample.iss │ ├── CodeAutomation.iss │ ├── CodeAutomation2.iss │ ├── CodeClasses.iss │ ├── CodeDlg.iss │ ├── CodeDll.iss │ ├── CodeDownloadFiles.iss │ ├── CodeExample1.iss │ ├── CodePrepareToInstall.iss │ ├── Components.iss │ ├── Example1.iss │ ├── Example2.iss │ ├── Example3.iss │ ├── ISPPExample1.iss │ ├── ISPPExample1License.txt │ ├── Languages.iss │ ├── License.txt │ ├── MyDll.dll │ ├── MyDll │ │ ├── C# │ │ │ ├── MyDll.cs │ │ │ ├── MyDll.csproj │ │ │ ├── MyDll.sln │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── C │ │ │ ├── MyDll.c │ │ │ ├── MyDll.def │ │ │ └── MyDll.dsp │ │ └── Delphi │ │ │ └── MyDll.dpr │ ├── MyProg-ARM64.exe │ ├── MyProg-x64.exe │ ├── MyProg.chm │ ├── MyProg.exe │ ├── Readme-Dutch.txt │ ├── Readme-German.txt │ ├── Readme.txt │ ├── UnicodeExample1.iss │ └── UninstallCodeExample1.iss ├── ISCC.exe ├── ISCmplr.dll ├── ISPP.chm ├── ISPP.dll ├── ISPPBuiltins.iss ├── ISetup.chm ├── Languages │ ├── Armenian.isl │ ├── BrazilianPortuguese.isl │ ├── Catalan.isl │ ├── Corsican.isl │ ├── Czech.isl │ ├── Danish.isl │ ├── Dutch.isl │ ├── Finnish.isl │ ├── French.isl │ ├── German.isl │ ├── Hebrew.isl │ ├── Icelandic.isl │ ├── Italian.isl │ ├── Japanese.isl │ ├── Norwegian.isl │ ├── Polish.isl │ ├── Portuguese.isl │ ├── Russian.isl │ ├── Slovak.isl │ ├── Slovenian.isl │ ├── Spanish.isl │ ├── Turkish.isl │ └── Ukrainian.isl ├── Setup.e32 ├── SetupLdr.e32 ├── WizModernImage-IS.bmp ├── WizModernImage.bmp ├── WizModernSmallImage-IS.bmp ├── WizModernSmallImage.bmp ├── isbunzip.dll ├── isbzip.dll ├── isfaq.url ├── islzma.dll ├── islzma32.exe ├── islzma64.exe ├── isscint.dll ├── isunzlib.dll ├── iszlib.dll ├── license.txt └── whatsnew.htm ├── ismail.bmp ├── isportable.iss ├── license.txt ├── otherfiles ├── IDE.ico └── Iscrypt.ico ├── setup.ico └── setup.iss /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['http://www.jrsoftware.org/isdonate.php'] 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | commpilesettings.bat 2 | setup-sign.bat 3 | Output -------------------------------------------------------------------------------- /build.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | rem Inno Setup 4 | rem Copyright (C) 1997-2020 Jordan Russell 5 | rem Portions by Martijn Laan 6 | rem For conditions of distribution and use, see LICENSE.TXT. 7 | rem 8 | rem Batch file to prepare an QuickStart Pack release 9 | rem 10 | rem Run Inno Setup's build.bat before using 11 | rem 12 | rem Calls setup-sign.bat if it exists, else creates setup.exe without signing 13 | rem 14 | rem This batch files does the following things: 15 | rem -Compiling files: copy some base files to root and install IS into isfiles 16 | rem -Create Inno Setup QuickStart Pack installer 17 | rem 18 | rem Once done the installer can be found in Output 19 | 20 | setlocal 21 | 22 | set VER=6.1.2 23 | 24 | echo Building Inno Setup QuickStart Pack %VER%... 25 | echo. 26 | 27 | cd /d %~dp0 28 | 29 | call .\compile.bat 30 | if errorlevel 1 goto failed 31 | echo Compiling files done 32 | pause 33 | 34 | echo - Setup.exe 35 | if exist .\setup-sign.bat ( 36 | call .\setup-sign.bat 37 | ) else ( 38 | isfiles\iscc setup.iss 39 | ) 40 | if errorlevel 1 goto failed 41 | echo - Renaming files 42 | cd output 43 | if errorlevel 1 goto failed 44 | move /y mysetup.exe innosetup-qsp-%VER%.exe 45 | cd .. 46 | if errorlevel 1 goto failed 47 | echo Creating Inno Setup QuickStart Pack installer done 48 | 49 | echo All done! 50 | pause 51 | 52 | goto exit 53 | 54 | :failed 55 | echo *** FAILED *** 56 | cd .. 57 | :failed2 58 | exit /b 1 59 | 60 | :exit 61 | -------------------------------------------------------------------------------- /compile.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | rem Inno Setup 4 | rem Copyright (C) 1997-2019 Jordan Russell 5 | rem Portions by Martijn Laan 6 | rem For conditions of distribution and use, see LICENSE.TXT. 7 | rem 8 | rem Batch file to "compile" the files needed by QSP 9 | 10 | setlocal 11 | 12 | if exist compilesettings.bat goto compilesettingsfound 13 | :compilesettingserror 14 | echo compilesettings.bat is missing or incomplete. It needs to be created 15 | echo with the following lines, adjusted for your system: 16 | echo. 17 | echo set ISSRCROOT=c:\issrc [Path to Inno Setup source code] 18 | goto failed2 19 | 20 | :compilesettingsfound 21 | set ISSRCROOT= 22 | call .\compilesettings.bat 23 | if "%ISSRCROOT%"=="" goto compilesettingserror 24 | 25 | echo - Copying license.txt and isdonateandmail.iss 26 | copy %ISSRCROOT%\license.txt . 27 | if errorlevel 1 goto failed 28 | copy %ISSRCROOT%\isdonateandmail.iss . 29 | if errorlevel 1 goto failed 30 | copy %ISSRCROOT%\isportable.iss . 31 | if errorlevel 1 goto failed 32 | copy %ISSRCROOT%\isdonate.bmp . 33 | if errorlevel 1 goto failed 34 | copy %ISSRCROOT%\ismail.bmp . 35 | if errorlevel 1 goto failed 36 | 37 | if "%VER%"=="" ( 38 | echo - Running mysetup.exe 39 | %ISSRCROOT%\Output\mysetup.exe /silent /currentuser /portable=1 /dir=isfiles 40 | ) else ( 41 | echo - Running innosetup-%VER%.exe 42 | %ISSRCROOT%\Output\innosetup-%VER%.exe /silent /currentuser /portable=1 /dir=isfiles 43 | ) 44 | if errorlevel 1 goto failed 45 | 46 | echo Success! 47 | cd .. 48 | goto exit 49 | 50 | :failed 51 | echo *** FAILED *** 52 | cd .. 53 | :failed2 54 | exit /b 1 55 | 56 | :exit 57 | -------------------------------------------------------------------------------- /isdonate.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isdonate.bmp -------------------------------------------------------------------------------- /isdonateandmail.iss: -------------------------------------------------------------------------------- 1 | // -- IsDonateAndMail.iss -- 2 | // Include file which adds donate and subscribe buttons to Setup 3 | // 4 | [Files] 5 | Source: "isdonate.bmp"; Flags: dontcopy 6 | Source: "ismail.bmp"; Flags: dontcopy 7 | 8 | [CustomMessages] 9 | ; No need to localize: The IS website is in English only 10 | IsDonateAndMailDonateHint=Support Inno Setup - Thank you! 11 | IsDonateAndMailMailHint=Be notified by e-mail of new Inno Setup releases 12 | 13 | [Code] 14 | procedure DonateImageOnClick(Sender: TObject); 15 | var 16 | ErrorCode: Integer; 17 | begin 18 | ShellExecAsOriginalUser('open', 'https://jrsoftware.org/isdonate.php', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 19 | end; 20 | 21 | procedure MailImageOnClick(Sender: TObject); 22 | var 23 | ErrorCode: Integer; 24 | begin 25 | ShellExecAsOriginalUser('open', 'https://jrsoftware.org/ismail.php', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 26 | end; 27 | 28 | 29 | procedure IsDonateAndMailInitializeWizard; 30 | var 31 | ImageFileName: String; 32 | DonateImage, MailImage: TBitmapImage; 33 | BevelTop: Integer; 34 | begin 35 | if WizardSilent then 36 | Exit; 37 | 38 | ImageFileName := ExpandConstant('{tmp}\isdonate.bmp'); 39 | ExtractTemporaryFile(ExtractFileName(ImageFileName)); 40 | 41 | DonateImage := TBitmapImage.Create(WizardForm); 42 | DonateImage.AutoSize := True; 43 | DonateImage.Bitmap.LoadFromFile(ImageFileName); 44 | DonateImage.Hint := CustomMessage('IsDonateAndMailDonateHint'); 45 | DonateImage.ShowHint := True; 46 | DonateImage.Anchors := [akLeft, akBottom]; 47 | BevelTop := WizardForm.Bevel.Top; 48 | DonateImage.Top := BevelTop + (WizardForm.ClientHeight - BevelTop - DonateImage.Bitmap.Height) div 2; 49 | DonateImage.Left := DonateImage.Top - BevelTop; 50 | DonateImage.Cursor := crHand; 51 | DonateImage.OnClick := @DonateImageOnClick; 52 | DonateImage.Parent := WizardForm; 53 | 54 | ImageFileName := ExpandConstant('{tmp}\ismail.bmp'); 55 | ExtractTemporaryFile(ExtractFileName(ImageFileName)); 56 | 57 | MailImage := TBitmapImage.Create(WizardForm); 58 | MailImage.AutoSize := True; 59 | MailImage.Bitmap.LoadFromFile(ImageFileName); 60 | MailImage.Hint := CustomMessage('IsDonateAndMailMailHint'); 61 | MailImage.ShowHint := True; 62 | MailImage.Anchors := [akLeft, akBottom]; 63 | MailImage.Top := DonateImage.Top 64 | MailImage.Left := DonateImage.Left + DonateImage.Width + ScaleX(8); 65 | MailImage.Cursor := crHand; 66 | MailImage.OnClick := @MailImageOnClick; 67 | MailImage.Parent := WizardForm; 68 | end; -------------------------------------------------------------------------------- /isfiles/Compil32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Compil32.exe -------------------------------------------------------------------------------- /isfiles/Examples/64Bit.iss: -------------------------------------------------------------------------------- 1 | ; -- 64Bit.iss -- 2 | ; Demonstrates installation of a program built for the x64 (a.k.a. AMD64) 3 | ; architecture. 4 | ; To successfully run this installation and the program it installs, 5 | ; you must have a "x64" edition of Windows. 6 | 7 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 8 | 9 | [Setup] 10 | AppName=My Program 11 | AppVersion=1.5 12 | WizardStyle=modern 13 | DefaultDirName={autopf}\My Program 14 | DefaultGroupName=My Program 15 | UninstallDisplayIcon={app}\MyProg.exe 16 | Compression=lzma2 17 | SolidCompression=yes 18 | OutputDir=userdocs:Inno Setup Examples Output 19 | ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on 20 | ; anything but x64. 21 | ArchitecturesAllowed=x64 22 | ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be 23 | ; done in "64-bit mode" on x64, meaning it should use the native 24 | ; 64-bit Program Files directory and the 64-bit view of the registry. 25 | ArchitecturesInstallIn64BitMode=x64 26 | 27 | [Files] 28 | Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe" 29 | Source: "MyProg.chm"; DestDir: "{app}" 30 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 31 | 32 | [Icons] 33 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 34 | -------------------------------------------------------------------------------- /isfiles/Examples/64BitThreeArch.iss: -------------------------------------------------------------------------------- 1 | ; -- 64BitThreeArch.iss -- 2 | ; Demonstrates how to install a program built for three different 3 | ; architectures (x86, x64, ARM64) using a single installer. 4 | 5 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 6 | 7 | [Setup] 8 | AppName=My Program 9 | AppVersion=1.5 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\My Program 12 | DefaultGroupName=My Program 13 | UninstallDisplayIcon={app}\MyProg.exe 14 | Compression=lzma2 15 | SolidCompression=yes 16 | OutputDir=userdocs:Inno Setup Examples Output 17 | ; "ArchitecturesInstallIn64BitMode=x64 arm64" requests that the install 18 | ; be done in "64-bit mode" on x64 & ARM64, meaning it should use the 19 | ; native 64-bit Program Files directory and the 64-bit view of the 20 | ; registry. On all other architectures it will install in "32-bit mode". 21 | ArchitecturesInstallIn64BitMode=x64 arm64 22 | 23 | [Files] 24 | ; Install MyProg-x64.exe if running on x64, MyProg-ARM64.exe if 25 | ; running on ARM64, MyProg.exe otherwise. 26 | ; Place all x64 files here 27 | Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: InstallX64 28 | ; Place all ARM64 files here, first one should be marked 'solidbreak' 29 | Source: "MyProg-ARM64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: InstallARM64; Flags: solidbreak 30 | ; Place all x86 files here, first one should be marked 'solidbreak' 31 | Source: "MyProg.exe"; DestDir: "{app}"; Check: InstallOtherArch; Flags: solidbreak 32 | ; Place all common files here, first one should be marked 'solidbreak' 33 | Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak 34 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 35 | 36 | [Icons] 37 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 38 | 39 | [Code] 40 | function InstallX64: Boolean; 41 | begin 42 | Result := Is64BitInstallMode and (ProcessorArchitecture = paX64); 43 | end; 44 | 45 | function InstallARM64: Boolean; 46 | begin 47 | Result := Is64BitInstallMode and (ProcessorArchitecture = paARM64); 48 | end; 49 | 50 | function InstallOtherArch: Boolean; 51 | begin 52 | Result := not InstallX64 and not InstallARM64; 53 | end; 54 | -------------------------------------------------------------------------------- /isfiles/Examples/64BitTwoArch.iss: -------------------------------------------------------------------------------- 1 | ; -- 64BitTwoArch.iss -- 2 | ; Demonstrates how to install a program built for two different 3 | ; architectures (x86 and x64) using a single installer: on a "x86" 4 | ; edition of Windows the x86 version of the program will be 5 | ; installed but on a "x64" edition of Windows the x64 version will 6 | ; be installed. 7 | 8 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 9 | 10 | [Setup] 11 | AppName=My Program 12 | AppVersion=1.5 13 | DefaultDirName={autopf}\My Program 14 | DefaultGroupName=My Program 15 | UninstallDisplayIcon={app}\MyProg.exe 16 | WizardStyle=modern 17 | Compression=lzma2 18 | SolidCompression=yes 19 | OutputDir=userdocs:Inno Setup Examples Output 20 | ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be 21 | ; done in "64-bit mode" on x64, meaning it should use the native 22 | ; 64-bit Program Files directory and the 64-bit view of the registry. 23 | ; On all other architectures it will install in "32-bit mode". 24 | ArchitecturesInstallIn64BitMode=x64 25 | ; Note: We don't set ProcessorsAllowed because we want this 26 | ; installation to run on all architectures (including Itanium, 27 | ; since it's capable of running 32-bit code too). 28 | 29 | [Files] 30 | ; Install MyProg-x64.exe if running in 64-bit mode (x64; see above), 31 | ; MyProg.exe otherwise. 32 | ; Place all x64 files here 33 | Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Is64BitInstallMode 34 | ; Place all x86 files here, first one should be marked 'solidbreak' 35 | Source: "MyProg.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: solidbreak 36 | ; Place all common files here, first one should be marked 'solidbreak' 37 | Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak 38 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 39 | 40 | [Icons] 41 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 42 | -------------------------------------------------------------------------------- /isfiles/Examples/AllPagesExample.iss: -------------------------------------------------------------------------------- 1 | ; -- AllPagesExample.iss -- 2 | ; Same as Example1.iss, but shows all the wizard pages Setup may potentially display 3 | 4 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 5 | 6 | [Setup] 7 | AppName=My Program 8 | AppVersion=1.5 9 | WizardStyle=modern 10 | DefaultDirName={autopf}\My Program 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | Compression=lzma2 14 | SolidCompression=yes 15 | OutputDir=userdocs:Inno Setup Examples Output 16 | 17 | DisableWelcomePage=no 18 | LicenseFile=license.txt 19 | #define Password 'password' 20 | Password={#Password} 21 | InfoBeforeFile=readme.txt 22 | UserInfoPage=yes 23 | PrivilegesRequired=lowest 24 | DisableDirPage=no 25 | DisableProgramGroupPage=no 26 | InfoAfterFile=readme.txt 27 | 28 | [Files] 29 | Source: "MyProg.exe"; DestDir: "{app}" 30 | Source: "MyProg.chm"; DestDir: "{app}" 31 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 32 | 33 | [Icons] 34 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 35 | 36 | [Components] 37 | Name: "component"; Description: "Component"; 38 | 39 | [Tasks] 40 | Name: "task"; Description: "Task"; 41 | 42 | [Code] 43 | var 44 | OutputProgressWizardPage: TOutputProgressWizardPage; 45 | OutputProgressWizardPageAfterID: Integer; 46 | 47 | procedure InitializeWizard; 48 | var 49 | InputQueryWizardPage: TInputQueryWizardPage; 50 | InputOptionWizardPage: TInputOptionWizardPage; 51 | InputDirWizardPage: TInputDirWizardPage; 52 | InputFileWizardPage: TInputFileWizardPage; 53 | OutputMsgWizardPage: TOutputMsgWizardPage; 54 | OutputMsgMemoWizardPage: TOutputMsgMemoWizardPage; 55 | AfterID: Integer; 56 | begin 57 | WizardForm.PasswordEdit.Text := '{#Password}'; 58 | 59 | AfterID := wpSelectTasks; 60 | 61 | AfterID := CreateCustomPage(AfterID, 'CreateCustomPage', 'ADescription').ID; 62 | 63 | InputQueryWizardPage := CreateInputQueryPage(AfterID, 'CreateInputQueryPage', 'ADescription', 'ASubCaption'); 64 | InputQueryWizardPage.Add('&APrompt:', False); 65 | AfterID := InputQueryWizardPage.ID; 66 | 67 | InputOptionWizardPage := CreateInputOptionPage(AfterID, 'CreateInputOptionPage', 'ADescription', 'ASubCaption', False, False); 68 | InputOptionWizardPage.Add('&AOption'); 69 | AfterID := InputOptionWizardPage.ID; 70 | 71 | InputDirWizardPage := CreateInputDirPage(AfterID, 'CreateInputDirPage', 'ADescription', 'ASubCaption', False, 'ANewFolderName'); 72 | InputDirWizardPage.Add('&APrompt:'); 73 | InputDirWizardPage.Values[0] := 'C:\'; 74 | AfterID := InputDirWizardPage.ID; 75 | 76 | InputFileWizardPage := CreateInputFilePage(AfterID, 'CreateInputFilePage', 'ADescription', 'ASubCaption'); 77 | InputFileWizardPage.Add('&APrompt:', 'Executable files|*.exe|All files|*.*', '.exe'); 78 | AfterID := InputFileWizardPage.ID; 79 | 80 | OutputMsgWizardPage := CreateOutputMsgPage(AfterID, 'CreateOutputMsgPage', 'ADescription', 'AMsg'); 81 | AfterID := OutputMsgWizardPage.ID; 82 | 83 | OutputMsgMemoWizardPage := CreateOutputMsgMemoPage(AfterID, 'CreateOutputMsgMemoPage', 'ADescription', 'ASubCaption', 'AMsg'); 84 | AfterID := OutputMsgMemoWizardPage.ID; 85 | 86 | OutputProgressWizardPage := CreateOutputProgressPage('CreateOutputProgressPage', 'ADescription'); 87 | OutputProgressWizardPageAfterID := AfterID; 88 | 89 | { See CodeDownloadFiles.iss for a CreateDownloadPage example } 90 | end; 91 | 92 | function NextButtonClick(CurPageID: Integer): Boolean; 93 | var 94 | Position, Max: Integer; 95 | begin 96 | if CurPageID = OutputProgressWizardPageAfterID then begin 97 | try 98 | Max := 25; 99 | for Position := 0 to Max do begin 100 | OutputProgressWizardPage.SetProgress(Position, Max); 101 | if Position = 0 then 102 | OutputProgressWizardPage.Show; 103 | Sleep(2000 div Max); 104 | end; 105 | finally 106 | OutputProgressWizardPage.Hide; 107 | end; 108 | end; 109 | Result := True; 110 | end; 111 | 112 | function PrepareToInstall(var NeedsRestart: Boolean): String; 113 | begin 114 | if SuppressibleMsgBox('Do you want to stop Setup at the Preparing To Install wizard page?', mbConfirmation, MB_YESNO, IDNO) = IDYES then 115 | Result := 'Stopped by user'; 116 | end; -------------------------------------------------------------------------------- /isfiles/Examples/CodeAutomation.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeAutomation.iss -- 2 | ; 3 | ; This script shows how to use IDispatch based COM Automation objects. 4 | 5 | [Setup] 6 | AppName=My Program 7 | AppVersion=1.5 8 | WizardStyle=modern 9 | DisableWelcomePage=no 10 | CreateAppDir=no 11 | DisableProgramGroupPage=yes 12 | DefaultGroupName=My Program 13 | UninstallDisplayIcon={app}\MyProg.exe 14 | OutputDir=userdocs:Inno Setup Examples Output 15 | 16 | [Code] 17 | 18 | {--- SQLDMO ---} 19 | 20 | const 21 | SQLServerName = 'localhost'; 22 | SQLDMOGrowth_MB = 0; 23 | 24 | procedure SQLDMOButtonOnClick(Sender: TObject); 25 | var 26 | SQLServer, Database, DBFile, LogFile: Variant; 27 | IDColumn, NameColumn, Table: Variant; 28 | begin 29 | if MsgBox('Setup will now connect to Microsoft SQL Server ''' + SQLServerName + ''' via a trusted connection and create a database. Do you want to continue?', mbInformation, mb_YesNo) = idNo then 30 | Exit; 31 | 32 | { Create the main SQLDMO COM Automation object } 33 | 34 | try 35 | SQLServer := CreateOleObject('SQLDMO.SQLServer'); 36 | except 37 | RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); 38 | end; 39 | 40 | { Connect to the Microsoft SQL Server } 41 | 42 | SQLServer.LoginSecure := True; 43 | SQLServer.Connect(SQLServerName); 44 | 45 | MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok); 46 | 47 | { Setup a database } 48 | 49 | Database := CreateOleObject('SQLDMO.Database'); 50 | Database.Name := 'Inno Setup'; 51 | 52 | DBFile := CreateOleObject('SQLDMO.DBFile'); 53 | DBFile.Name := 'ISData1'; 54 | DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf'; 55 | DBFile.PrimaryFile := True; 56 | DBFile.FileGrowthType := SQLDMOGrowth_MB; 57 | DBFile.FileGrowth := 1; 58 | 59 | Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile); 60 | 61 | LogFile := CreateOleObject('SQLDMO.LogFile'); 62 | LogFile.Name := 'ISLog1'; 63 | LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf'; 64 | 65 | Database.TransactionLog.LogFiles.Add(LogFile); 66 | 67 | { Add the database } 68 | 69 | SQLServer.Databases.Add(Database); 70 | 71 | MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok); 72 | 73 | { Setup some columns } 74 | 75 | IDColumn := CreateOleObject('SQLDMO.Column'); 76 | IDColumn.Name := 'id'; 77 | IDColumn.Datatype := 'int'; 78 | IDColumn.Identity := True; 79 | IDColumn.IdentityIncrement := 1; 80 | IDColumn.IdentitySeed := 1; 81 | IDColumn.AllowNulls := False; 82 | 83 | NameColumn := CreateOleObject('SQLDMO.Column'); 84 | NameColumn.Name := 'name'; 85 | NameColumn.Datatype := 'varchar'; 86 | NameColumn.Length := '64'; 87 | NameColumn.AllowNulls := False; 88 | 89 | { Setup a table } 90 | 91 | Table := CreateOleObject('SQLDMO.Table'); 92 | Table.Name := 'authors'; 93 | Table.FileGroup := 'PRIMARY'; 94 | 95 | { Add the columns and the table } 96 | 97 | Table.Columns.Add(IDColumn); 98 | Table.Columns.Add(NameColumn); 99 | 100 | Database.Tables.Add(Table); 101 | 102 | MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok); 103 | end; 104 | 105 | {--- IIS ---} 106 | 107 | const 108 | IISServerName = 'localhost'; 109 | IISServerNumber = '1'; 110 | IISURL = 'http://127.0.0.1'; 111 | 112 | procedure IISButtonOnClick(Sender: TObject); 113 | var 114 | IIS, WebSite, WebServer, WebRoot, VDir: Variant; 115 | ErrorCode: Integer; 116 | begin 117 | if MsgBox('Setup will now connect to Microsoft IIS Server ''' + IISServerName + ''' and create a virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then 118 | Exit; 119 | 120 | { Create the main IIS COM Automation object } 121 | 122 | try 123 | IIS := CreateOleObject('IISNamespace'); 124 | except 125 | RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); 126 | end; 127 | 128 | { Connect to the IIS server } 129 | 130 | WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); 131 | WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); 132 | WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); 133 | 134 | { (Re)create a virtual dir } 135 | 136 | try 137 | WebRoot.Delete('IIsWebVirtualDir', 'innosetup'); 138 | WebRoot.SetInfo(); 139 | except 140 | end; 141 | 142 | VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup'); 143 | VDir.AccessRead := True; 144 | VDir.AppFriendlyName := 'Inno Setup'; 145 | VDir.Path := 'C:\inetpub\innosetup'; 146 | VDir.AppCreate(True); 147 | VDir.SetInfo(); 148 | 149 | MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok); 150 | 151 | { Write some html and display it } 152 | 153 | if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then 154 | Exit; 155 | 156 | ForceDirectories(VDir.Path); 157 | SaveStringToFile(VDir.Path + '/index.htm', 'Inno Setup rocks!', False); 158 | if not ShellExecAsOriginalUser('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then 159 | MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok); 160 | end; 161 | 162 | {--- MSXML ---} 163 | 164 | const 165 | XMLURL = 'http://jrsoftware.github.io/issrc/ISHelp/isxfunc.xml'; 166 | XMLFileName = 'isxfunc.xml'; 167 | XMLFileName2 = 'isxfuncmodified.xml'; 168 | 169 | procedure MSXMLButtonOnClick(Sender: TObject); 170 | var 171 | XMLHTTP, XMLDoc, NewNode, RootNode: Variant; 172 | Path: String; 173 | begin 174 | if MsgBox('Setup will now use MSXML to download XML file ''' + XMLURL + ''' and save it to disk.'#13#13'Setup will then load, modify and save this XML file. Do you want to continue?', mbInformation, mb_YesNo) = idNo then 175 | Exit; 176 | 177 | { Create the main MSXML COM Automation object } 178 | 179 | try 180 | XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP'); 181 | except 182 | RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); 183 | end; 184 | 185 | { Download the XML file } 186 | 187 | XMLHTTP.Open('GET', XMLURL, False); 188 | XMLHTTP.Send(); 189 | 190 | Path := ExpandConstant('{src}\'); 191 | XMLHTTP.responseXML.Save(Path + XMLFileName); 192 | 193 | MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok); 194 | 195 | { Load the XML File } 196 | 197 | XMLDoc := CreateOleObject('MSXML2.DOMDocument'); 198 | XMLDoc.async := False; 199 | XMLDoc.resolveExternals := False; 200 | XMLDoc.load(Path + XMLFileName); 201 | if XMLDoc.parseError.errorCode <> 0 then 202 | RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason); 203 | 204 | MsgBox('Loaded the XML file.', mbInformation, mb_Ok); 205 | 206 | { Modify the XML document } 207 | 208 | NewNode := XMLDoc.createElement('isxdemo'); 209 | RootNode := XMLDoc.documentElement; 210 | RootNode.appendChild(NewNode); 211 | RootNode.lastChild.text := 'Hello, World'; 212 | 213 | { Save the XML document } 214 | 215 | XMLDoc.Save(Path + XMLFileName2); 216 | 217 | MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok); 218 | end; 219 | 220 | 221 | {--- Word ---} 222 | 223 | procedure WordButtonOnClick(Sender: TObject); 224 | var 225 | Word: Variant; 226 | begin 227 | if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then 228 | Exit; 229 | 230 | { Try to get an active Word COM Automation object } 231 | 232 | try 233 | Word := GetActiveOleObject('Word.Application'); 234 | except 235 | end; 236 | 237 | if VarIsEmpty(Word) then 238 | MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok) 239 | else 240 | MsgBox('Microsoft Word is running.', mbInformation, mb_Ok) 241 | end; 242 | 243 | {--- Windows Firewall ---} 244 | 245 | const 246 | NET_FW_IP_VERSION_ANY = 2; 247 | NET_FW_SCOPE_ALL = 0; 248 | 249 | procedure FirewallButtonOnClick(Sender: TObject); 250 | var 251 | Firewall, Application: Variant; 252 | begin 253 | if MsgBox('Setup will now add itself to Windows Firewall as an authorized application for the current profile (' + GetUserNameString + '). Do you want to continue?', mbInformation, mb_YesNo) = idNo then 254 | Exit; 255 | 256 | { Create the main Windows Firewall COM Automation object } 257 | 258 | try 259 | Firewall := CreateOleObject('HNetCfg.FwMgr'); 260 | except 261 | RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); 262 | end; 263 | 264 | { Add the authorization } 265 | 266 | Application := CreateOleObject('HNetCfg.FwAuthorizedApplication'); 267 | Application.Name := 'Setup'; 268 | Application.IPVersion := NET_FW_IP_VERSION_ANY; 269 | Application.ProcessImageFileName := ExpandConstant('{srcexe}'); 270 | Application.Scope := NET_FW_SCOPE_ALL; 271 | Application.Enabled := True; 272 | 273 | Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application); 274 | 275 | MsgBox('Setup is now an authorized application for the current profile', mbInformation, mb_Ok); 276 | end; 277 | 278 | {---} 279 | 280 | procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); 281 | begin 282 | with TNewButton.Create(WizardForm) do begin 283 | Left := ALeft; 284 | Top := ATop; 285 | Width := WizardForm.CancelButton.Width; 286 | Height := WizardForm.CancelButton.Height; 287 | Caption := ACaption; 288 | OnClick := ANotifyEvent; 289 | Parent := WizardForm.WelcomePage; 290 | end; 291 | end; 292 | 293 | procedure InitializeWizard(); 294 | var 295 | Left, LeftInc, Top, TopInc: Integer; 296 | begin 297 | Left := WizardForm.WelcomeLabel2.Left; 298 | LeftInc := WizardForm.CancelButton.Width + ScaleX(8); 299 | TopInc := WizardForm.CancelButton.Height + ScaleY(8); 300 | Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; 301 | 302 | CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick); 303 | Top := Top + TopInc; 304 | CreateButton(Left + LeftInc, Top, '&Firewall...', @FirewallButtonOnClick); 305 | Top := Top + TopInc; 306 | CreateButton(Left, Top, '&IIS...', @IISButtonOnClick); 307 | Top := Top + TopInc; 308 | CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick); 309 | Top := Top + TopInc; 310 | CreateButton(Left, Top, '&Word...', @WordButtonOnClick); 311 | end; -------------------------------------------------------------------------------- /isfiles/Examples/CodeAutomation2.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeAutomation2.iss -- 2 | ; 3 | ; This script shows how to use IUnknown based COM Automation objects. 4 | ; 5 | ; Note: some unneeded interface functions which had special types have been replaced 6 | ; by dummies to avoid having to define those types. Do not remove these dummies as 7 | ; that would change the function indices which is bad. Also, not all function 8 | ; protoypes have been tested, only those used by this example. 9 | 10 | [Setup] 11 | AppName=My Program 12 | AppVersion=1.5 13 | WizardStyle=modern 14 | DisableWelcomePage=no 15 | CreateAppDir=no 16 | DisableProgramGroupPage=yes 17 | DefaultGroupName=My Program 18 | UninstallDisplayIcon={app}\MyProg.exe 19 | OutputDir=userdocs:Inno Setup Examples Output 20 | 21 | [Code] 22 | 23 | {--- IShellLink ---} 24 | 25 | const 26 | CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}'; 27 | 28 | type 29 | IShellLinkW = interface(IUnknown) 30 | '{000214F9-0000-0000-C000-000000000046}' 31 | procedure Dummy; 32 | procedure Dummy2; 33 | procedure Dummy3; 34 | function GetDescription(pszName: String; cchMaxName: Integer): HResult; 35 | function SetDescription(pszName: String): HResult; 36 | function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult; 37 | function SetWorkingDirectory(pszDir: String): HResult; 38 | function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult; 39 | function SetArguments(pszArgs: String): HResult; 40 | function GetHotkey(var pwHotkey: Word): HResult; 41 | function SetHotkey(wHotkey: Word): HResult; 42 | function GetShowCmd(out piShowCmd: Integer): HResult; 43 | function SetShowCmd(iShowCmd: Integer): HResult; 44 | function GetIconLocation(pszIconPath: String; cchIconPath: Integer; 45 | out piIcon: Integer): HResult; 46 | function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult; 47 | function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult; 48 | function Resolve(Wnd: HWND; fFlags: DWORD): HResult; 49 | function SetPath(pszFile: String): HResult; 50 | end; 51 | 52 | IPersist = interface(IUnknown) 53 | '{0000010C-0000-0000-C000-000000000046}' 54 | function GetClassID(var classID: TGUID): HResult; 55 | end; 56 | 57 | IPersistFile = interface(IPersist) 58 | '{0000010B-0000-0000-C000-000000000046}' 59 | function IsDirty: HResult; 60 | function Load(pszFileName: String; dwMode: Longint): HResult; 61 | function Save(pszFileName: String; fRemember: BOOL): HResult; 62 | function SaveCompleted(pszFileName: String): HResult; 63 | function GetCurFile(out pszFileName: String): HResult; 64 | end; 65 | 66 | procedure IShellLinkButtonOnClick(Sender: TObject); 67 | var 68 | Obj: IUnknown; 69 | SL: IShellLinkW; 70 | PF: IPersistFile; 71 | begin 72 | { Create the main ShellLink COM Automation object } 73 | Obj := CreateComObject(StringToGuid(CLSID_ShellLink)); 74 | 75 | { Set the shortcut properties } 76 | SL := IShellLinkW(Obj); 77 | OleCheck(SL.SetPath(ExpandConstant('{srcexe}'))); 78 | OleCheck(SL.SetArguments('')); 79 | OleCheck(SL.SetShowCmd(SW_SHOWNORMAL)); 80 | 81 | { Save the shortcut } 82 | PF := IPersistFile(Obj); 83 | OleCheck(PF.Save(ExpandConstant('{autodesktop}\CodeAutomation2 Test.lnk'), True)); 84 | 85 | MsgBox('Saved a shortcut named ''CodeAutomation2 Test'' on the desktop.', mbInformation, mb_Ok); 86 | end; 87 | 88 | {--- ITaskScheduler ---} 89 | 90 | const 91 | CLSID_TaskScheduler = '{148BD52A-A2AB-11CE-B11F-00AA00530503}'; 92 | CLSID_Task = '{148BD520-A2AB-11CE-B11F-00AA00530503}'; 93 | IID_Task = '{148BD524-A2AB-11CE-B11F-00AA00530503}'; 94 | TASK_TIME_TRIGGER_DAILY = 1; 95 | 96 | type 97 | ITaskScheduler = interface(IUnknown) 98 | '{148BD527-A2AB-11CE-B11F-00AA00530503}' 99 | function SetTargetComputer(pwszComputer: String): HResult; 100 | function GetTargetComputer(out ppwszComputer: String): HResult; 101 | procedure Dummy; 102 | function Activate(pwszName: String; var riid: TGUID; out ppUnk: IUnknown): HResult; 103 | function Delete(pwszName: String): HResult; 104 | function NewWorkItem(pwszTaskName: String; var rclsid: TGUID; var riid: TGUID; out ppUnk: IUnknown): HResult; 105 | procedure Dummy2; 106 | function IsOfType(pwszName: String; var riid: TGUID): HResult; 107 | end; 108 | 109 | TDaily = record 110 | DaysInterval: WORD; 111 | end; 112 | 113 | TWeekly = record 114 | WeeksInterval: WORD; 115 | rgfDaysOfTheWeek: WORD; 116 | end; 117 | 118 | TMonthyDate = record 119 | rgfDays: DWORD; 120 | rgfMonths: WORD; 121 | end; 122 | 123 | TMonthlyDow = record 124 | wWhichWeek: WORD; 125 | rgfDaysOfTheWeek: WORD; 126 | rgfMonths: WORD; 127 | end; 128 | 129 | { ROPS doesn't support unions, replace this with the type you need and adjust padding (end size has to be 48). } 130 | TTriggerTypeUnion = record 131 | Daily: TDaily; 132 | Pad1: WORD; 133 | Pad2: WORD; 134 | Pad3: WORD; 135 | end; 136 | 137 | TTaskTrigger = record 138 | cbTriggerSize: WORD; 139 | Reserved1: WORD; 140 | wBeginYear: WORD; 141 | wBeginMonth: WORD; 142 | wBeginDay: WORD; 143 | wEndYear: WORD; 144 | wEndMonth: WORD; 145 | wEndDay: WORD; 146 | wStartHour: WORD; 147 | wStartMinute: WORD; 148 | MinutesDuration: DWORD; 149 | MinutesInterval: DWORD; 150 | rgFlags: DWORD; 151 | TriggerType: DWORD; 152 | Type_: TTriggerTypeUnion; 153 | Reserved2: WORD; 154 | wRandomMinutesInterval: WORD; 155 | end; 156 | 157 | ITaskTrigger = interface(IUnknown) 158 | '{148BD52B-A2AB-11CE-B11F-00AA00530503}' 159 | function SetTrigger(var pTrigger: TTaskTrigger): HResult; 160 | function GetTrigger(var pTrigger: TTaskTrigger): HResult; 161 | function GetTriggerString(var ppwszTrigger: String): HResult; 162 | end; 163 | 164 | IScheduledWorkItem = interface(IUnknown) 165 | '{A6B952F0-A4B1-11D0-997D-00AA006887EC}' 166 | function CreateTrigger(out piNewTrigger: Word; out ppTrigger: ITaskTrigger): HResult; 167 | function DeleteTrigger(iTrigger: Word): HResult; 168 | function GetTriggerCount(out pwCount: Word): HResult; 169 | function GetTrigger(iTrigger: Word; var ppTrigger: ITaskTrigger): HResult; 170 | function GetTriggerString(iTrigger: Word; out ppwszTrigger: String): HResult; 171 | procedure Dummy; 172 | procedure Dummy2; 173 | function SetIdleWait(wIdleMinutes: Word; wDeadlineMinutes: Word): HResult; 174 | function GetIdleWait(out pwIdleMinutes: Word; out pwDeadlineMinutes: Word): HResult; 175 | function Run: HResult; 176 | function Terminate: HResult; 177 | function EditWorkItem(hParent: HWND; dwReserved: DWORD): HResult; 178 | procedure Dummy3; 179 | function GetStatus(out phrStatus: HResult): HResult; 180 | function GetExitCode(out pdwExitCode: DWORD): HResult; 181 | function SetComment(pwszComment: String): HResult; 182 | function GetComment(out ppwszComment: String): HResult; 183 | function SetCreator(pwszCreator: String): HResult; 184 | function GetCreator(out ppwszCreator: String): HResult; 185 | function SetWorkItemData(cbData: Word; var rgbData: Byte): HResult; 186 | function GetWorkItemData(out pcbData: Word; out prgbData: Byte): HResult; 187 | function SetErrorRetryCount(wRetryCount: Word): HResult; 188 | function GetErrorRetryCount(out pwRetryCount: Word): HResult; 189 | function SetErrorRetryInterval(wRetryInterval: Word): HResult; 190 | function GetErrorRetryInterval(out pwRetryInterval: Word): HResult; 191 | function SetFlags(dwFlags: DWORD): HResult; 192 | function GetFlags(out pdwFlags: DWORD): HResult; 193 | function SetAccountInformation(pwszAccountName: String; pwszPassword: String): HResult; 194 | function GetAccountInformation(out ppwszAccountName: String): HResult; 195 | end; 196 | 197 | ITask = interface(IScheduledWorkItem) 198 | '{148BD524-A2AB-11CE-B11F-00AA00530503}' 199 | function SetApplicationName(pwszApplicationName: String): HResult; 200 | function GetApplicationName(out ppwszApplicationName: String): HResult; 201 | function SetParameters(pwszParameters: String): HResult; 202 | function GetParameters(out ppwszParameters: String): HResult; 203 | function SetWorkingDirectory(pwszWorkingDirectory: String): HResult; 204 | function GetWorkingDirectory(out ppwszWorkingDirectory: String): HResult; 205 | function SetPriority(dwPriority: DWORD): HResult; 206 | function GetPriority(out pdwPriority: DWORD): HResult; 207 | function SetTaskFlags(dwFlags: DWORD): HResult; 208 | function GetTaskFlags(out pdwFlags: DWORD): HResult; 209 | function SetMaxRunTime(dwMaxRunTimeMS: DWORD): HResult; 210 | function GetMaxRunTime(out pdwMaxRunTimeMS: DWORD): HResult; 211 | end; 212 | 213 | 214 | procedure ITaskSchedulerButtonOnClick(Sender: TObject); 215 | var 216 | Obj, Obj2: IUnknown; 217 | TaskScheduler: ITaskScheduler; 218 | G1, G2: TGUID; 219 | Task: ITask; 220 | iNewTrigger: WORD; 221 | TaskTrigger: ITaskTrigger; 222 | TaskTrigger2: TTaskTrigger; 223 | PF: IPersistFile; 224 | begin 225 | { Create the main TaskScheduler COM Automation object } 226 | Obj := CreateComObject(StringToGuid(CLSID_TaskScheduler)); 227 | 228 | { Create the Task COM automation object } 229 | TaskScheduler := ITaskScheduler(Obj); 230 | G1 := StringToGuid(CLSID_Task); 231 | G2 := StringToGuid(IID_Task); 232 | //This will throw an exception if the task already exists 233 | OleCheck(TaskScheduler.NewWorkItem('CodeAutomation2 Test', G1, G2, Obj2)); 234 | 235 | { Set the task properties } 236 | Task := ITask(Obj2); 237 | OleCheck(Task.SetComment('CodeAutomation2 Test Comment')); 238 | OleCheck(Task.SetApplicationName(ExpandConstant('{srcexe}'))); 239 | 240 | { Set the task account information } 241 | //Uncomment the following and provide actual user info to get a runnable task 242 | //OleCheck(Task.SetAccountInformation('username', 'password')); 243 | 244 | { Create the TaskTrigger COM automation object } 245 | OleCheck(Task.CreateTrigger(iNewTrigger, TaskTrigger)); 246 | 247 | { Set the task trigger properties } 248 | with TaskTrigger2 do begin 249 | cbTriggerSize := SizeOf(TaskTrigger2); 250 | wBeginYear := 2009; 251 | wBeginMonth := 10; 252 | wBeginDay := 1; 253 | wStartHour := 12; 254 | TriggerType := TASK_TIME_TRIGGER_DAILY; 255 | Type_.Daily.DaysInterval := 1; 256 | end; 257 | OleCheck(TaskTrigger.SetTrigger(TaskTrigger2)); 258 | 259 | { Save the task } 260 | PF := IPersistFile(Obj2); 261 | OleCheck(PF.Save('', True)); 262 | 263 | MsgBox('Created a daily task named named ''CodeAutomation2 Test''.' + #13#13 + 'Note: Account information not set so the task won''t actually run, uncomment the SetAccountInfo call and provide actual user info to get a runnable task.', mbInformation, mb_Ok); 264 | end; 265 | 266 | {---} 267 | 268 | procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); 269 | begin 270 | with TNewButton.Create(WizardForm) do begin 271 | Left := ALeft; 272 | Top := ATop; 273 | Width := (WizardForm.CancelButton.Width*3)/2; 274 | Height := WizardForm.CancelButton.Height; 275 | Caption := ACaption; 276 | OnClick := ANotifyEvent; 277 | Parent := WizardForm.WelcomePage; 278 | end; 279 | end; 280 | 281 | procedure InitializeWizard(); 282 | var 283 | Left, LeftInc, Top, TopInc: Integer; 284 | begin 285 | Left := WizardForm.WelcomeLabel2.Left; 286 | LeftInc := (WizardForm.CancelButton.Width*3)/2 + ScaleX(8); 287 | TopInc := WizardForm.CancelButton.Height + ScaleY(8); 288 | Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; 289 | 290 | CreateButton(Left, Top, '&IShellLink...', @IShellLinkButtonOnClick); 291 | Top := Top + TopInc; 292 | CreateButton(Left, Top, '&ITaskScheduler...', @ITaskSchedulerButtonOnClick); 293 | end; 294 | 295 | 296 | 297 | 298 | 299 | -------------------------------------------------------------------------------- /isfiles/Examples/CodeClasses.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeClasses.iss -- 2 | ; 3 | ; This script shows how to use the WizardForm object and the various VCL classes. 4 | 5 | [Setup] 6 | AppName=My Program 7 | AppVersion=1.5 8 | WizardStyle=modern 9 | CreateAppDir=no 10 | DisableProgramGroupPage=yes 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | OutputDir=userdocs:Inno Setup Examples Output 14 | PrivilegesRequired=lowest 15 | 16 | ; Uncomment the following three lines to test the layout when scaling and rtl are active 17 | ;[LangOptions] 18 | ;RightToLeft=yes 19 | ;DialogFontSize=12 20 | 21 | [Files] 22 | Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy 23 | 24 | [Code] 25 | procedure ButtonOnClick(Sender: TObject); 26 | begin 27 | MsgBox('You clicked the button!', mbInformation, mb_Ok); 28 | end; 29 | 30 | procedure BitmapImageOnClick(Sender: TObject); 31 | begin 32 | MsgBox('You clicked the image!', mbInformation, mb_Ok); 33 | end; 34 | 35 | procedure FormButtonOnClick(Sender: TObject); 36 | var 37 | Form: TSetupForm; 38 | Edit: TNewEdit; 39 | OKButton, CancelButton: TNewButton; 40 | W: Integer; 41 | begin 42 | Form := CreateCustomForm(); 43 | try 44 | Form.ClientWidth := ScaleX(256); 45 | Form.ClientHeight := ScaleY(128); 46 | Form.Caption := 'TSetupForm'; 47 | 48 | Edit := TNewEdit.Create(Form); 49 | Edit.Top := ScaleY(10); 50 | Edit.Left := ScaleX(10); 51 | Edit.Width := Form.ClientWidth - ScaleX(2 * 10); 52 | Edit.Height := ScaleY(23); 53 | Edit.Anchors := [akLeft, akTop, akRight]; 54 | Edit.Text := 'TNewEdit'; 55 | Edit.Parent := Form; 56 | 57 | OKButton := TNewButton.Create(Form); 58 | OKButton.Parent := Form; 59 | OKButton.Caption := 'OK'; 60 | OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10); 61 | OKButton.Top := Form.ClientHeight - ScaleY(23 + 10); 62 | OKButton.Height := ScaleY(23); 63 | OKButton.Anchors := [akRight, akBottom] 64 | OKButton.ModalResult := mrOk; 65 | OKButton.Default := True; 66 | 67 | CancelButton := TNewButton.Create(Form); 68 | CancelButton.Parent := Form; 69 | CancelButton.Caption := 'Cancel'; 70 | CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10); 71 | CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10); 72 | CancelButton.Height := ScaleY(23); 73 | CancelButton.Anchors := [akRight, akBottom] 74 | CancelButton.ModalResult := mrCancel; 75 | CancelButton.Cancel := True; 76 | 77 | W := Form.CalculateButtonWidth([OKButton.Caption, CancelButton.Caption]); 78 | OKButton.Width := W; 79 | CancelButton.Width := W; 80 | 81 | Form.ActiveControl := Edit; 82 | { Keep the form from sizing vertically since we don't have any controls which can size vertically } 83 | Form.KeepSizeY := True; 84 | { Center on WizardForm. Without this call it will still automatically center, but on the screen } 85 | Form.FlipSizeAndCenterIfNeeded(True, WizardForm, False); 86 | 87 | if Form.ShowModal() = mrOk then 88 | MsgBox('You clicked OK.', mbInformation, MB_OK); 89 | finally 90 | Form.Free(); 91 | end; 92 | end; 93 | 94 | procedure TaskDialogButtonOnClick(Sender: TObject); 95 | begin 96 | { TaskDialogMsgBox isn't a class but showing it anyway since it fits with the theme } 97 | 98 | case TaskDialogMsgBox('Choose A or B', 99 | 'You can choose A or B.', 100 | mbInformation, 101 | MB_YESNOCANCEL, ['I choose &A'#13#10'A will be chosen.', 'I choose &B'#13#10'B will be chosen.'], 102 | IDYES) of 103 | IDYES: MsgBox('You chose A.', mbInformation, MB_OK); 104 | IDNO: MsgBox('You chose B.', mbInformation, MB_OK); 105 | end; 106 | end; 107 | 108 | procedure CreateTheWizardPages; 109 | var 110 | Page: TWizardPage; 111 | Button, FormButton, TaskDialogButton: TNewButton; 112 | Panel: TPanel; 113 | CheckBox: TNewCheckBox; 114 | Edit: TNewEdit; 115 | PasswordEdit: TPasswordEdit; 116 | Memo: TNewMemo; 117 | ComboBox: TNewComboBox; 118 | ListBox: TNewListBox; 119 | StaticText, ProgressBarLabel: TNewStaticText; 120 | ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar; 121 | CheckListBox, CheckListBox2: TNewCheckListBox; 122 | FolderTreeView: TFolderTreeView; 123 | BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage; 124 | BitmapFileName: String; 125 | RichEditViewer: TRichEditViewer; 126 | begin 127 | { TButton and others } 128 | 129 | Page := CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TButton and others'); 130 | 131 | Button := TNewButton.Create(Page); 132 | Button.Caption := 'TNewButton'; 133 | Button.Width := WizardForm.CalculateButtonWidth([Button.Caption]); 134 | Button.Height := ScaleY(23); 135 | Button.OnClick := @ButtonOnClick; 136 | Button.Parent := Page.Surface; 137 | 138 | Panel := TPanel.Create(Page); 139 | Panel.Width := Page.SurfaceWidth div 2 - ScaleX(8); 140 | Panel.Left := Page.SurfaceWidth - Panel.Width; 141 | Panel.Height := Button.Height * 2; 142 | Panel.Anchors := [akLeft, akTop, akRight]; 143 | Panel.Caption := 'TPanel'; 144 | Panel.Color := clWindow; 145 | Panel.BevelKind := bkFlat; 146 | Panel.BevelOuter := bvNone; 147 | Panel.ParentBackground := False; 148 | Panel.Parent := Page.Surface; 149 | 150 | CheckBox := TNewCheckBox.Create(Page); 151 | CheckBox.Top := Button.Top + Button.Height + ScaleY(8); 152 | CheckBox.Width := Page.SurfaceWidth div 2; 153 | CheckBox.Height := ScaleY(17); 154 | CheckBox.Caption := 'TNewCheckBox'; 155 | CheckBox.Checked := True; 156 | CheckBox.Parent := Page.Surface; 157 | 158 | Edit := TNewEdit.Create(Page); 159 | Edit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); 160 | Edit.Width := Page.SurfaceWidth div 2 - ScaleX(8); 161 | Edit.Text := 'TNewEdit'; 162 | Edit.Parent := Page.Surface; 163 | 164 | PasswordEdit := TPasswordEdit.Create(Page); 165 | PasswordEdit.Left := Page.SurfaceWidth - Edit.Width; 166 | PasswordEdit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); 167 | PasswordEdit.Width := Edit.Width; 168 | PasswordEdit.Anchors := [akLeft, akTop, akRight]; 169 | PasswordEdit.Text := 'TPasswordEdit'; 170 | PasswordEdit.Parent := Page.Surface; 171 | 172 | Memo := TNewMemo.Create(Page); 173 | Memo.Top := Edit.Top + Edit.Height + ScaleY(8); 174 | Memo.Width := Page.SurfaceWidth; 175 | Memo.Height := ScaleY(89); 176 | Memo.Anchors := [akLeft, akTop, akRight, akBottom]; 177 | Memo.ScrollBars := ssVertical; 178 | Memo.Text := 'TNewMemo'; 179 | Memo.Parent := Page.Surface; 180 | 181 | FormButton := TNewButton.Create(Page); 182 | FormButton.Caption := 'TSetupForm'; 183 | FormButton.Top := Memo.Top + Memo.Height + ScaleY(8); 184 | FormButton.Width := WizardForm.CalculateButtonWidth([FormButton.Caption]); 185 | FormButton.Height := ScaleY(23); 186 | FormButton.Anchors := [akLeft, akBottom]; 187 | FormButton.OnClick := @FormButtonOnClick; 188 | FormButton.Parent := Page.Surface; 189 | 190 | TaskDialogButton := TNewButton.Create(Page); 191 | TaskDialogButton.Caption := 'TaskDialogMsgBox'; 192 | TaskDialogButton.Top := FormButton.Top; 193 | TaskDialogButton.Left := FormButton.Left + FormButton.Width + ScaleX(8); 194 | TaskDialogButton.Width := WizardForm.CalculateButtonWidth([TaskDialogButton.Caption]); 195 | TaskDialogButton.Height := ScaleY(23); 196 | TaskDialogButton.Anchors := [akLeft, akBottom]; 197 | TaskDialogButton.OnClick := @TaskDialogButtonOnClick; 198 | TaskDialogButton.Parent := Page.Surface; 199 | 200 | { TComboBox and others } 201 | 202 | Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TComboBox and others'); 203 | 204 | ComboBox := TNewComboBox.Create(Page); 205 | ComboBox.Width := Page.SurfaceWidth; 206 | ComboBox.Anchors := [akLeft, akTop, akRight]; 207 | ComboBox.Parent := Page.Surface; 208 | ComboBox.Style := csDropDownList; 209 | ComboBox.Items.Add('TComboBox'); 210 | ComboBox.ItemIndex := 0; 211 | 212 | ListBox := TNewListBox.Create(Page); 213 | ListBox.Top := ComboBox.Top + ComboBox.Height + ScaleY(8); 214 | ListBox.Width := Page.SurfaceWidth; 215 | ListBox.Height := ScaleY(97); 216 | ListBox.Anchors := [akLeft, akTop, akRight, akBottom]; 217 | ListBox.Parent := Page.Surface; 218 | ListBox.Items.Add('TListBox'); 219 | ListBox.ItemIndex := 0; 220 | 221 | StaticText := TNewStaticText.Create(Page); 222 | StaticText.Top := ListBox.Top + ListBox.Height + ScaleY(8); 223 | StaticText.Anchors := [akLeft, akRight, akBottom]; 224 | StaticText.Caption := 'TNewStaticText'; 225 | StaticText.AutoSize := True; 226 | StaticText.Parent := Page.Surface; 227 | 228 | ProgressBarLabel := TNewStaticText.Create(Page); 229 | ProgressBarLabel.Top := StaticText.Top + StaticText.Height + ScaleY(8); 230 | ProgressBarLabel.Anchors := [akLeft, akBottom]; 231 | ProgressBarLabel.Caption := 'TNewProgressBar'; 232 | ProgressBarLabel.AutoSize := True; 233 | ProgressBarLabel.Parent := Page.Surface; 234 | 235 | ProgressBar := TNewProgressBar.Create(Page); 236 | ProgressBar.Left := ProgressBarLabel.Width + ScaleX(8); 237 | ProgressBar.Top := ProgressBarLabel.Top; 238 | ProgressBar.Width := Page.SurfaceWidth - ProgressBar.Left; 239 | ProgressBar.Height := ProgressBarLabel.Height + ScaleY(8); 240 | ProgressBar.Anchors := [akLeft, akRight, akBottom]; 241 | ProgressBar.Parent := Page.Surface; 242 | ProgressBar.Position := 25; 243 | 244 | ProgressBar2 := TNewProgressBar.Create(Page); 245 | ProgressBar2.Left := ProgressBarLabel.Width + ScaleX(8); 246 | ProgressBar2.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(4); 247 | ProgressBar2.Width := Page.SurfaceWidth - ProgressBar.Left; 248 | ProgressBar2.Height := ProgressBarLabel.Height + ScaleY(8); 249 | ProgressBar2.Anchors := [akLeft, akRight, akBottom]; 250 | ProgressBar2.Parent := Page.Surface; 251 | ProgressBar2.Position := 50; 252 | { Note: TNewProgressBar.State property only has an effect on Windows Vista and newer } 253 | ProgressBar2.State := npbsError; 254 | 255 | ProgressBar3 := TNewProgressBar.Create(Page); 256 | ProgressBar3.Left := ProgressBarLabel.Width + ScaleX(8); 257 | ProgressBar3.Top := ProgressBar2.Top + ProgressBar2.Height + ScaleY(4); 258 | ProgressBar3.Width := Page.SurfaceWidth - ProgressBar.Left; 259 | ProgressBar3.Height := ProgressBarLabel.Height + ScaleY(8); 260 | ProgressBar3.Anchors := [akLeft, akRight, akBottom]; 261 | ProgressBar3.Parent := Page.Surface; 262 | { Note: TNewProgressBar.Style property only has an effect on Windows XP and newer } 263 | ProgressBar3.Style := npbstMarquee; 264 | 265 | { TNewCheckListBox } 266 | 267 | Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TNewCheckListBox'); 268 | 269 | CheckListBox := TNewCheckListBox.Create(Page); 270 | CheckListBox.Width := Page.SurfaceWidth; 271 | CheckListBox.Height := ScaleY(97); 272 | CheckListBox.Anchors := [akLeft, akTop, akRight, akBottom]; 273 | CheckListBox.Flat := True; 274 | CheckListBox.Parent := Page.Surface; 275 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); 276 | CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, True, True, nil); 277 | CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, False, True, nil); 278 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); 279 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, True, True, False, True, nil); 280 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 2, True, True, False, True, nil); 281 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 2, False, True, False, True, nil); 282 | CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, False, True, False, True, nil); 283 | 284 | CheckListBox2 := TNewCheckListBox.Create(Page); 285 | CheckListBox2.Top := CheckListBox.Top + CheckListBox.Height + ScaleY(8); 286 | CheckListBox2.Width := Page.SurfaceWidth; 287 | CheckListBox2.Height := ScaleY(97); 288 | CheckListBox2.Anchors := [akLeft, akRight, akBottom]; 289 | CheckListBox2.BorderStyle := bsNone; 290 | CheckListBox2.ParentColor := True; 291 | CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight; 292 | CheckListBox2.ShowLines := False; 293 | CheckListBox2.WantTabs := True; 294 | CheckListBox2.Parent := Page.Surface; 295 | CheckListBox2.AddGroup('TNewCheckListBox', '', 0, nil); 296 | CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, True, True, nil); 297 | CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, False, True, nil); 298 | 299 | { TFolderTreeView } 300 | 301 | Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TFolderTreeView'); 302 | 303 | FolderTreeView := TFolderTreeView.Create(Page); 304 | FolderTreeView.Width := Page.SurfaceWidth; 305 | FolderTreeView.Height := Page.SurfaceHeight; 306 | FolderTreeView.Anchors := [akLeft, akTop, akRight, akBottom]; 307 | FolderTreeView.Parent := Page.Surface; 308 | FolderTreeView.Directory := ExpandConstant('{src}'); 309 | 310 | { TBitmapImage } 311 | 312 | Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TBitmapImage'); 313 | 314 | BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp'); 315 | ExtractTemporaryFile(ExtractFileName(BitmapFileName)); 316 | 317 | BitmapImage := TBitmapImage.Create(Page); 318 | BitmapImage.AutoSize := True; 319 | BitmapImage.Bitmap.LoadFromFile(BitmapFileName); 320 | BitmapImage.Cursor := crHand; 321 | BitmapImage.OnClick := @BitmapImageOnClick; 322 | BitmapImage.Parent := Page.Surface; 323 | 324 | BitmapImage2 := TBitmapImage.Create(Page); 325 | BitmapImage2.BackColor := $400000; 326 | BitmapImage2.Bitmap := BitmapImage.Bitmap; 327 | BitmapImage2.Center := True; 328 | BitmapImage2.Left := BitmapImage.Width + 10; 329 | BitmapImage2.Height := 2*BitmapImage.Height; 330 | BitmapImage2.Width := 2*BitmapImage.Width; 331 | BitmapImage2.Cursor := crHand; 332 | BitmapImage2.OnClick := @BitmapImageOnClick; 333 | BitmapImage2.Parent := Page.Surface; 334 | 335 | BitmapImage3 := TBitmapImage.Create(Page); 336 | BitmapImage3.Bitmap := BitmapImage.Bitmap; 337 | BitmapImage3.Stretch := True; 338 | BitmapImage3.Left := 3*BitmapImage.Width + 20; 339 | BitmapImage3.Height := 4*BitmapImage.Height; 340 | BitmapImage3.Width := 4*BitmapImage.Width; 341 | BitmapImage3.Anchors := [akLeft, akTop, akRight, akBottom]; 342 | BitmapImage3.Cursor := crHand; 343 | BitmapImage3.OnClick := @BitmapImageOnClick; 344 | BitmapImage3.Parent := Page.Surface; 345 | 346 | { TRichViewer } 347 | 348 | Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TRichViewer'); 349 | 350 | RichEditViewer := TRichEditViewer.Create(Page); 351 | RichEditViewer.Width := Page.SurfaceWidth; 352 | RichEditViewer.Height := Page.SurfaceHeight; 353 | RichEditViewer.Anchors := [akLeft, akTop, akRight, akBottom]; 354 | RichEditViewer.BevelKind := bkFlat; 355 | RichEditViewer.BorderStyle := bsNone; 356 | RichEditViewer.Parent := Page.Surface; 357 | RichEditViewer.ScrollBars := ssVertical; 358 | RichEditViewer.UseRichEdit := True; 359 | RichEditViewer.RTFText := '{\rtf1\ansi\ansicpg1252\deff0\deflang1043{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue128;}\viewkind4\uc1\pard\f0\fs20 T\cf1 Rich\cf2 Edit\cf3 Viewer\cf0\par}'; 360 | RichEditViewer.ReadOnly := True; 361 | end; 362 | 363 | procedure AboutButtonOnClick(Sender: TObject); 364 | begin 365 | MsgBox('This demo shows some features of the various form objects and control classes.', mbInformation, mb_Ok); 366 | end; 367 | 368 | procedure URLLabelOnClick(Sender: TObject); 369 | var 370 | ErrorCode: Integer; 371 | begin 372 | ShellExecAsOriginalUser('open', 'http://www.innosetup.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 373 | end; 374 | 375 | procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton); 376 | var 377 | AboutButton: TNewButton; 378 | URLLabel: TNewStaticText; 379 | begin 380 | AboutButton := TNewButton.Create(ParentForm); 381 | AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width; 382 | AboutButton.Top := CancelButton.Top; 383 | AboutButton.Width := CancelButton.Width; 384 | AboutButton.Height := CancelButton.Height; 385 | AboutButton.Anchors := [akLeft, akBottom]; 386 | AboutButton.Caption := '&About...'; 387 | AboutButton.OnClick := @AboutButtonOnClick; 388 | AboutButton.Parent := ParentForm; 389 | 390 | URLLabel := TNewStaticText.Create(ParentForm); 391 | URLLabel.Caption := 'www.innosetup.com'; 392 | URLLabel.Cursor := crHand; 393 | URLLabel.OnClick := @URLLabelOnClick; 394 | URLLabel.Parent := ParentForm; 395 | { Alter Font *after* setting Parent so the correct defaults are inherited first } 396 | URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]; 397 | URLLabel.Font.Color := clHotLight 398 | URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2; 399 | URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20); 400 | URLLabel.Anchors := [akLeft, akBottom]; 401 | end; 402 | 403 | procedure InitializeWizard(); 404 | begin 405 | { Custom wizard pages } 406 | 407 | CreateTheWizardPages; 408 | 409 | { Custom controls } 410 | 411 | CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton); 412 | 413 | { Custom beveled label } 414 | 415 | WizardForm.BeveledLabel.Caption := ' Bevel '; 416 | end; 417 | 418 | procedure InitializeUninstallProgressForm(); 419 | begin 420 | { Custom controls } 421 | 422 | CreateAboutButtonAndURLLabel(UninstallProgressForm, UninstallProgressForm.CancelButton); 423 | end; 424 | 425 | -------------------------------------------------------------------------------- /isfiles/Examples/CodeDlg.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeDlg.iss -- 2 | ; 3 | ; This script shows how to insert custom wizard pages into Setup and how to handle 4 | ; these pages. Furthermore it shows how to 'communicate' between the [Code] section 5 | ; and the regular Inno Setup sections using {code:...} constants. Finally it shows 6 | ; how to customize the settings text on the 'Ready To Install' page. 7 | 8 | [Setup] 9 | AppName=My Program 10 | AppVersion=1.5 11 | WizardStyle=modern 12 | DisableWelcomePage=no 13 | DefaultDirName={autopf}\My Program 14 | DisableProgramGroupPage=yes 15 | UninstallDisplayIcon={app}\MyProg.exe 16 | OutputDir=userdocs:Inno Setup Examples Output 17 | PrivilegesRequired=lowest 18 | 19 | [Files] 20 | Source: "MyProg.exe"; DestDir: "{app}" 21 | Source: "MyProg.chm"; DestDir: "{app}" 22 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 23 | 24 | [Registry] 25 | Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 26 | Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 27 | Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Name"; ValueData: "{code:GetUser|Name}" 28 | Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Company"; ValueData: "{code:GetUser|Company}" 29 | Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "DataDir"; ValueData: "{code:GetDataDir}" 30 | ; etc. 31 | 32 | [Dirs] 33 | Name: {code:GetDataDir}; Flags: uninsneveruninstall 34 | 35 | [Code] 36 | var 37 | UserPage: TInputQueryWizardPage; 38 | UsagePage: TInputOptionWizardPage; 39 | LightMsgPage: TOutputMsgWizardPage; 40 | KeyPage: TInputQueryWizardPage; 41 | ProgressPage: TOutputProgressWizardPage; 42 | DataDirPage: TInputDirWizardPage; 43 | 44 | procedure InitializeWizard; 45 | begin 46 | { Create the pages } 47 | 48 | UserPage := CreateInputQueryPage(wpWelcome, 49 | 'Personal Information', 'Who are you?', 50 | 'Please specify your name and the company for whom you work, then click Next.'); 51 | UserPage.Add('Name:', False); 52 | UserPage.Add('Company:', False); 53 | 54 | UsagePage := CreateInputOptionPage(UserPage.ID, 55 | 'Personal Information', 'How will you use My Program?', 56 | 'Please specify how you would like to use My Program, then click Next.', 57 | True, False); 58 | UsagePage.Add('Light mode (no ads, limited functionality)'); 59 | UsagePage.Add('Sponsored mode (with ads, full functionality)'); 60 | UsagePage.Add('Paid mode (no ads, full functionality)'); 61 | 62 | LightMsgPage := CreateOutputMsgPage(UsagePage.ID, 63 | 'Personal Information', 'How will you use My Program?', 64 | 'Note: to enjoy all features My Program can offer and to support its development, ' + 65 | 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' + 66 | 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 + 67 | 'Click Back if you want to change your usage mode setting now, or click Next to ' + 68 | 'continue with the installation.'); 69 | 70 | KeyPage := CreateInputQueryPage(UsagePage.ID, 71 | 'Personal Information', 'What''s your registration key?', 72 | 'Please specify your registration key and click Next to continue. If you don''t ' + 73 | 'have a valid registration key, click Back to choose a different usage mode.'); 74 | KeyPage.Add('Registration key:', False); 75 | 76 | ProgressPage := CreateOutputProgressPage('Personal Information', 77 | 'What''s your registration key?'); 78 | 79 | DataDirPage := CreateInputDirPage(wpSelectDir, 80 | 'Select Personal Data Directory', 'Where should personal data files be installed?', 81 | 'Select the folder in which Setup should install personal data files, then click Next.', 82 | False, ''); 83 | DataDirPage.Add(''); 84 | 85 | { Set default values, using settings that were stored last time if possible } 86 | 87 | UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}')); 88 | UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}')); 89 | 90 | case GetPreviousData('UsageMode', '') of 91 | 'light': UsagePage.SelectedValueIndex := 0; 92 | 'sponsored': UsagePage.SelectedValueIndex := 1; 93 | 'paid': UsagePage.SelectedValueIndex := 2; 94 | else 95 | UsagePage.SelectedValueIndex := 1; 96 | end; 97 | 98 | DataDirPage.Values[0] := GetPreviousData('DataDir', ''); 99 | end; 100 | 101 | procedure RegisterPreviousData(PreviousDataKey: Integer); 102 | var 103 | UsageMode: String; 104 | begin 105 | { Store the settings so we can restore them next time } 106 | SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]); 107 | SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]); 108 | case UsagePage.SelectedValueIndex of 109 | 0: UsageMode := 'light'; 110 | 1: UsageMode := 'sponsored'; 111 | 2: UsageMode := 'paid'; 112 | end; 113 | SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode); 114 | SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]); 115 | end; 116 | 117 | function ShouldSkipPage(PageID: Integer): Boolean; 118 | begin 119 | { Skip pages that shouldn't be shown } 120 | if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then 121 | Result := True 122 | else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then 123 | Result := True 124 | else 125 | Result := False; 126 | end; 127 | 128 | function NextButtonClick(CurPageID: Integer): Boolean; 129 | var 130 | I: Integer; 131 | begin 132 | { Validate certain pages before allowing the user to proceed } 133 | if CurPageID = UserPage.ID then begin 134 | if UserPage.Values[0] = '' then begin 135 | MsgBox('You must enter your name.', mbError, MB_OK); 136 | Result := False; 137 | end else begin 138 | if DataDirPage.Values[0] = '' then 139 | DataDirPage.Values[0] := 'C:\' + UserPage.Values[0]; 140 | Result := True; 141 | end; 142 | end else if CurPageID = KeyPage.ID then begin 143 | { Just to show how 'OutputProgress' pages work. 144 | Always use a try..finally between the Show and Hide calls as shown below. } 145 | ProgressPage.SetText('Authorizing registration key...', ''); 146 | ProgressPage.SetProgress(0, 0); 147 | ProgressPage.Show; 148 | try 149 | for I := 0 to 10 do begin 150 | ProgressPage.SetProgress(I, 10); 151 | Sleep(100); 152 | end; 153 | finally 154 | ProgressPage.Hide; 155 | end; 156 | if GetSHA1OfString('codedlg' + KeyPage.Values[0]) = '8013f310d340dab18a0d0cda2b5b115d2dcd97e4' then 157 | Result := True 158 | else begin 159 | MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK); 160 | Result := False; 161 | end; 162 | end else 163 | Result := True; 164 | end; 165 | 166 | function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, 167 | MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; 168 | var 169 | S: String; 170 | begin 171 | { Fill the 'Ready Memo' with the normal settings and the custom settings } 172 | S := ''; 173 | S := S + 'Personal Information:' + NewLine; 174 | S := S + Space + UserPage.Values[0] + NewLine; 175 | if UserPage.Values[1] <> '' then 176 | S := S + Space + UserPage.Values[1] + NewLine; 177 | S := S + NewLine; 178 | 179 | S := S + 'Usage Mode:' + NewLine + Space; 180 | case UsagePage.SelectedValueIndex of 181 | 0: S := S + 'Light mode'; 182 | 1: S := S + 'Sponsored mode'; 183 | 2: S := S + 'Paid mode'; 184 | end; 185 | S := S + NewLine + NewLine; 186 | 187 | S := S + MemoDirInfo + NewLine; 188 | S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine; 189 | 190 | Result := S; 191 | end; 192 | 193 | function GetUser(Param: String): String; 194 | begin 195 | { Return a user value } 196 | { Could also be split into separate GetUserName and GetUserCompany functions } 197 | if Param = 'Name' then 198 | Result := UserPage.Values[0] 199 | else if Param = 'Company' then 200 | Result := UserPage.Values[1]; 201 | end; 202 | 203 | function GetDataDir(Param: String): String; 204 | begin 205 | { Return the selected DataDir } 206 | Result := DataDirPage.Values[0]; 207 | end; 208 | -------------------------------------------------------------------------------- /isfiles/Examples/CodeDll.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeDll.iss -- 2 | ; 3 | ; This script shows how to call functions in external DLLs (like Windows API functions) 4 | ; at runtime and how to perform direct callbacks from these functions to functions 5 | ; in the script. 6 | 7 | [Setup] 8 | AppName=My Program 9 | AppVersion=1.5 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\My Program 12 | DisableProgramGroupPage=yes 13 | DisableWelcomePage=no 14 | UninstallDisplayIcon={app}\MyProg.exe 15 | OutputDir=userdocs:Inno Setup Examples Output 16 | 17 | [Files] 18 | Source: "MyProg.exe"; DestDir: "{app}" 19 | Source: "MyProg.chm"; DestDir: "{app}" 20 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 21 | ; Install our DLL to {app} so we can access it at uninstall time. 22 | ; Use "Flags: dontcopy" if you don't need uninstall time access. 23 | Source: "MyDll.dll"; DestDir: "{app}" 24 | 25 | [Code] 26 | const 27 | MB_ICONINFORMATION = $40; 28 | 29 | // Importing a Unicode Windows API function. 30 | function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; 31 | external 'MessageBoxW@user32.dll stdcall'; 32 | 33 | // Importing an ANSI custom DLL function, first for Setup, then for uninstall. 34 | procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); 35 | external 'MyDllFunc@files:MyDll.dll stdcall setuponly'; 36 | 37 | procedure MyDllFuncUninstall(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); 38 | external 'MyDllFunc@{app}\MyDll.dll stdcall uninstallonly'; 39 | 40 | // Importing an ANSI function for a DLL which might not exist at runtime. 41 | procedure DelayLoadedFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); 42 | external 'DllFunc@DllWhichMightNotExist.dll stdcall delayload'; 43 | 44 | function NextButtonClick(CurPage: Integer): Boolean; 45 | var 46 | hWnd: Integer; 47 | begin 48 | if CurPage = wpWelcome then begin 49 | hWnd := StrToInt(ExpandConstant('{wizardhwnd}')); 50 | 51 | MessageBox(hWnd, 'Hello from Windows API function', 'MessageBoxA', MB_OK or MB_ICONINFORMATION); 52 | 53 | MyDllFuncSetup(hWnd, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); 54 | 55 | try 56 | // If this DLL does not exist (it shouldn't), an exception will be raised. Press F9 to continue. 57 | DelayLoadedFunc(hWnd, 'Hello from delay loaded function', 'DllFunc', MB_OK or MB_ICONINFORMATION); 58 | except 59 | // 60 | end; 61 | end; 62 | Result := True; 63 | end; 64 | 65 | procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 66 | begin 67 | // Call our function just before the actual uninstall process begins. 68 | if CurUninstallStep = usUninstall then begin 69 | MyDllFuncUninstall(0, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); 70 | 71 | // Now that we're finished with it, unload MyDll.dll from memory. 72 | // We have to do this so that the uninstaller will be able to remove the DLL and the {app} directory. 73 | UnloadDLL(ExpandConstant('{app}\MyDll.dll')); 74 | end; 75 | end; 76 | 77 | // The following shows how to use callbacks. 78 | 79 | function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: Longword): Longword; 80 | external 'SetTimer@user32.dll stdcall'; 81 | 82 | var 83 | TimerCount: Integer; 84 | 85 | procedure MyTimerProc(Arg1, Arg2, Arg3, Arg4: Longword); 86 | begin 87 | Inc(TimerCount); 88 | WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount) + ' '; 89 | WizardForm.BeveledLabel.Visible := True; 90 | end; 91 | 92 | procedure InitializeWizard; 93 | begin 94 | SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc)); 95 | end; 96 | -------------------------------------------------------------------------------- /isfiles/Examples/CodeDownloadFiles.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeDownloadFiles.iss -- 2 | ; 3 | ; This script shows how the CreateDownloadPage support function can be used to 4 | ; download temporary files while showing the download progress to the user. 5 | 6 | [Setup] 7 | AppName=My Program 8 | AppVersion=1.5 9 | WizardStyle=modern 10 | DefaultDirName={autopf}\My Program 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | OutputDir=userdocs:Inno Setup Examples Output 14 | 15 | [Files] 16 | ; Place any regular files here 17 | Source: "MyProg.exe"; DestDir: "{app}"; 18 | Source: "MyProg.chm"; DestDir: "{app}"; 19 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; 20 | ; These files will be downloaded 21 | Source: "{tmp}\innosetup-latest.exe"; DestDir: "{app}"; Flags: external 22 | Source: "{tmp}\ISCrypt.dll"; DestDir: "{app}"; Flags: external 23 | 24 | [Icons] 25 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 26 | 27 | [Code] 28 | var 29 | DownloadPage: TDownloadWizardPage; 30 | 31 | function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean; 32 | begin 33 | if Progress = ProgressMax then 34 | Log(Format('Successfully downloaded file to {tmp}: %s', [FileName])); 35 | Result := True; 36 | end; 37 | 38 | procedure InitializeWizard; 39 | begin 40 | DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress); 41 | end; 42 | 43 | function NextButtonClick(CurPageID: Integer): Boolean; 44 | begin 45 | if CurPageID = wpReady then begin 46 | DownloadPage.Clear; 47 | DownloadPage.Add('https://jrsoftware.org/download.php/is.exe', 'innosetup-latest.exe', ''); 48 | DownloadPage.Add('https://jrsoftware.org/download.php/iscrypt.dll', 'ISCrypt.dll', '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc'); 49 | DownloadPage.Show; 50 | try 51 | try 52 | DownloadPage.Download; 53 | Result := True; 54 | except 55 | SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK); 56 | Result := False; 57 | end; 58 | finally 59 | DownloadPage.Hide; 60 | end; 61 | end else 62 | Result := True; 63 | end; -------------------------------------------------------------------------------- /isfiles/Examples/CodeExample1.iss: -------------------------------------------------------------------------------- 1 | ; -- CodeExample1.iss -- 2 | ; 3 | ; This script shows various things you can achieve using a [Code] section. 4 | 5 | [Setup] 6 | AppName=My Program 7 | AppVersion=1.5 8 | WizardStyle=modern 9 | DisableWelcomePage=no 10 | DefaultDirName={code:MyConst}\My Program 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | InfoBeforeFile=Readme.txt 14 | OutputDir=userdocs:Inno Setup Examples Output 15 | 16 | [Files] 17 | Source: "MyProg.exe"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.exe'); AfterInstall: AfterMyProgInstall('MyProg.exe') 18 | Source: "MyProg.chm"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.chm'); AfterInstall: AfterMyProgInstall('MyProg.chm') 19 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 20 | 21 | [Icons] 22 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 23 | 24 | [Code] 25 | var 26 | MyProgChecked: Boolean; 27 | MyProgCheckResult: Boolean; 28 | FinishedInstall: Boolean; 29 | 30 | function InitializeSetup(): Boolean; 31 | begin 32 | Log('InitializeSetup called'); 33 | Result := MsgBox('InitializeSetup:' #13#13 'Setup is initializing. Do you really want to start setup?', mbConfirmation, MB_YESNO) = idYes; 34 | if Result = False then 35 | MsgBox('InitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); 36 | end; 37 | 38 | procedure InitializeWizard; 39 | begin 40 | Log('InitializeWizard called'); 41 | end; 42 | 43 | 44 | procedure InitializeWizard2; 45 | begin 46 | Log('InitializeWizard2 called'); 47 | end; 48 | 49 | procedure DeinitializeSetup(); 50 | var 51 | FileName: String; 52 | ResultCode: Integer; 53 | begin 54 | Log('DeinitializeSetup called'); 55 | if FinishedInstall then begin 56 | if MsgBox('DeinitializeSetup:' #13#13 'The [Code] scripting demo has finished. Do you want to uninstall My Program now?', mbConfirmation, MB_YESNO) = idYes then begin 57 | FileName := ExpandConstant('{uninstallexe}'); 58 | if not Exec(FileName, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode) then 59 | MsgBox('DeinitializeSetup:' #13#13 'Execution of ''' + FileName + ''' failed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); 60 | end else 61 | MsgBox('DeinitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); 62 | end; 63 | end; 64 | 65 | procedure CurStepChanged(CurStep: TSetupStep); 66 | begin 67 | Log('CurStepChanged(' + IntToStr(Ord(CurStep)) + ') called'); 68 | if CurStep = ssPostInstall then 69 | FinishedInstall := True; 70 | end; 71 | 72 | procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer); 73 | begin 74 | Log('CurInstallProgressChanged(' + IntToStr(CurProgress) + ', ' + IntToStr(MaxProgress) + ') called'); 75 | end; 76 | 77 | function NextButtonClick(CurPageID: Integer): Boolean; 78 | var 79 | ResultCode: Integer; 80 | begin 81 | Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); 82 | case CurPageID of 83 | wpSelectDir: 84 | MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK); 85 | wpSelectProgramGroup: 86 | MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK); 87 | wpReady: 88 | begin 89 | if MsgBox('NextButtonClick:' #13#13 'Using the script, files can be extracted before the installation starts. For example we could extract ''MyProg.exe'' now and run it.' #13#13 'Do you want to do this?', mbConfirmation, MB_YESNO) = idYes then begin 90 | ExtractTemporaryFile('myprog.exe'); 91 | if not ExecAsOriginalUser(ExpandConstant('{tmp}\myprog.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then 92 | MsgBox('NextButtonClick:' #13#13 'The file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); 93 | end; 94 | BringToFrontAndRestore(); 95 | MsgBox('NextButtonClick:' #13#13 'The normal installation will now start.', mbInformation, MB_OK); 96 | end; 97 | end; 98 | 99 | Result := True; 100 | end; 101 | 102 | function BackButtonClick(CurPageID: Integer): Boolean; 103 | begin 104 | Log('BackButtonClick(' + IntToStr(CurPageID) + ') called'); 105 | Result := True; 106 | end; 107 | 108 | function ShouldSkipPage(PageID: Integer): Boolean; 109 | begin 110 | Log('ShouldSkipPage(' + IntToStr(PageID) + ') called'); 111 | { Skip wpInfoBefore page; show all others } 112 | case PageID of 113 | wpInfoBefore: 114 | Result := True; 115 | else 116 | Result := False; 117 | end; 118 | end; 119 | 120 | procedure CurPageChanged(CurPageID: Integer); 121 | begin 122 | Log('CurPageChanged(' + IntToStr(CurPageID) + ') called'); 123 | case CurPageID of 124 | wpWelcome: 125 | MsgBox('CurPageChanged:' #13#13 'Welcome to the [Code] scripting demo. This demo will show you some possibilities of the scripting support.' #13#13 'The scripting engine used is RemObjects Pascal Script by Carlo Kok. See http://www.remobjects.com/ps for more information.', mbInformation, MB_OK); 126 | wpFinished: 127 | MsgBox('CurPageChanged:' #13#13 'Welcome to final page of this demo. Click Finish to exit.', mbInformation, MB_OK); 128 | end; 129 | end; 130 | 131 | function PrepareToInstall(var NeedsRestart: Boolean): String; 132 | begin 133 | Log('PrepareToInstall() called'); 134 | if MsgBox('PrepareToInstall:' #13#13 'Setup is preparing to install. Using the script you can install any prerequisites, abort Setup on errors, and request restarts. Do you want to return an error now?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = idYes then 135 | Result := '.' 136 | else 137 | Result := ''; 138 | end; 139 | 140 | function MyProgCheck(): Boolean; 141 | begin 142 | Log('MyProgCheck() called'); 143 | if not MyProgChecked then begin 144 | MyProgCheckResult := MsgBox('MyProgCheck:' #13#13 'Using the script you can decide at runtime to include or exclude files from the installation. Do you want to install MyProg.exe and MyProg.chm to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes; 145 | MyProgChecked := True; 146 | end; 147 | Result := MyProgCheckResult; 148 | end; 149 | 150 | procedure BeforeMyProgInstall(S: String); 151 | begin 152 | Log('BeforeMyProgInstall(''' + S + ''') called'); 153 | MsgBox('BeforeMyProgInstall:' #13#13 'Setup is now going to install ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); 154 | end; 155 | 156 | procedure AfterMyProgInstall(S: String); 157 | begin 158 | Log('AfterMyProgInstall(''' + S + ''') called'); 159 | MsgBox('AfterMyProgInstall:' #13#13 'Setup just installed ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); 160 | end; 161 | 162 | function MyConst(Param: String): String; 163 | begin 164 | Log('MyConst(''' + Param + ''') called'); 165 | Result := ExpandConstant('{autopf}'); 166 | end; 167 | 168 | -------------------------------------------------------------------------------- /isfiles/Examples/CodePrepareToInstall.iss: -------------------------------------------------------------------------------- 1 | ; -- CodePrepareToInstall.iss -- 2 | ; 3 | ; This script shows how the PrepareToInstall event function can be used to 4 | ; install prerequisites and handle any reboots in between, while remembering 5 | ; user selections across reboots. 6 | 7 | [Setup] 8 | AppName=My Program 9 | AppVersion=1.5 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\My Program 12 | DefaultGroupName=My Program 13 | UninstallDisplayIcon={app}\MyProg.exe 14 | OutputDir=userdocs:Inno Setup Examples Output 15 | 16 | [Files] 17 | ; Place any prerequisite files here, for example: 18 | ; Source: "MyProg-Prerequisite-setup.exe"; Flags: dontcopy 19 | ; Place any regular files here, so *after* all your prerequisites. 20 | Source: "MyProg.exe"; DestDir: "{app}"; 21 | Source: "MyProg.chm"; DestDir: "{app}"; 22 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; 23 | 24 | [Icons] 25 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 26 | 27 | [Code] 28 | const 29 | (*** Customize the following to your own name. ***) 30 | RunOnceName = 'My Program Setup restart'; 31 | 32 | QuitMessageReboot = 'The installation of a prerequisite program was not completed. You will need to restart your computer to complete that installation.'#13#13'After restarting your computer, Setup will continue next time an administrator logs in.'; 33 | QuitMessageError = 'Error. Cannot continue.'; 34 | 35 | var 36 | Restarted: Boolean; 37 | 38 | function InitializeSetup(): Boolean; 39 | begin 40 | Restarted := ExpandConstant('{param:restart|0}') = '1'; 41 | 42 | if not Restarted then begin 43 | Result := not RegValueExists(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName); 44 | if not Result then 45 | MsgBox(QuitMessageReboot, mbError, mb_Ok); 46 | end else 47 | Result := True; 48 | end; 49 | 50 | function DetectAndInstallPrerequisites: Boolean; 51 | begin 52 | (*** Place your prerequisite detection and extraction+installation code below. ***) 53 | (*** Return False if missing prerequisites were detected but their installation failed, else return True. ***) 54 | 55 | // 56 | //extraction example: ExtractTemporaryFile('MyProg-Prerequisite-setup.exe'); 57 | 58 | Result := True; 59 | 60 | (*** Remove the following block! Used by this demo to simulate a prerequisite install requiring a reboot. ***) 61 | if not Restarted then 62 | RestartReplace(ParamStr(0), ''); 63 | end; 64 | 65 | function Quote(const S: String): String; 66 | begin 67 | Result := '"' + S + '"'; 68 | end; 69 | 70 | function AddParam(const S, P, V: String): String; 71 | begin 72 | if V <> '""' then 73 | Result := S + ' /' + P + '=' + V; 74 | end; 75 | 76 | function AddSimpleParam(const S, P: String): String; 77 | begin 78 | Result := S + ' /' + P; 79 | end; 80 | 81 | procedure CreateRunOnceEntry; 82 | var 83 | RunOnceData: String; 84 | begin 85 | RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /restart=1'; 86 | RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}')); 87 | RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue)); 88 | RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue)); 89 | if WizardNoIcons then 90 | RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS'); 91 | RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False))); 92 | RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False))); 93 | RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False))); 94 | 95 | (*** Place any custom user selection you want to remember below. ***) 96 | 97 | // 98 | 99 | RegWriteStringValue(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, RunOnceData); 100 | end; 101 | 102 | function PrepareToInstall(var NeedsRestart: Boolean): String; 103 | var 104 | ChecksumBefore, ChecksumAfter: String; 105 | begin 106 | ChecksumBefore := MakePendingFileRenameOperationsChecksum; 107 | if DetectAndInstallPrerequisites then begin 108 | ChecksumAfter := MakePendingFileRenameOperationsChecksum; 109 | if ChecksumBefore <> ChecksumAfter then begin 110 | CreateRunOnceEntry; 111 | NeedsRestart := True; 112 | Result := QuitMessageReboot; 113 | end; 114 | end else 115 | Result := QuitMessageError; 116 | end; 117 | 118 | function ShouldSkipPage(PageID: Integer): Boolean; 119 | begin 120 | Result := Restarted; 121 | end; 122 | 123 | -------------------------------------------------------------------------------- /isfiles/Examples/Components.iss: -------------------------------------------------------------------------------- 1 | ; -- Components.iss -- 2 | ; Demonstrates a components-based installation. 3 | 4 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 5 | 6 | [Setup] 7 | AppName=My Program 8 | AppVersion=1.5 9 | WizardStyle=modern 10 | DefaultDirName={autopf}\My Program 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | OutputDir=userdocs:Inno Setup Examples Output 14 | 15 | [Types] 16 | Name: "full"; Description: "Full installation" 17 | Name: "compact"; Description: "Compact installation" 18 | Name: "custom"; Description: "Custom installation"; Flags: iscustom 19 | 20 | [Components] 21 | Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed 22 | Name: "help"; Description: "Help File"; Types: full 23 | Name: "readme"; Description: "Readme File"; Types: full 24 | Name: "readme\en"; Description: "English"; Flags: exclusive 25 | Name: "readme\de"; Description: "German"; Flags: exclusive 26 | 27 | [Files] 28 | Source: "MyProg.exe"; DestDir: "{app}"; Components: program 29 | Source: "MyProg.chm"; DestDir: "{app}"; Components: help 30 | Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme 31 | Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme 32 | 33 | [Icons] 34 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 35 | -------------------------------------------------------------------------------- /isfiles/Examples/Example1.iss: -------------------------------------------------------------------------------- 1 | ; -- Example1.iss -- 2 | ; Demonstrates copying 3 files and creating an icon. 3 | 4 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 5 | 6 | [Setup] 7 | AppName=My Program 8 | AppVersion=1.5 9 | WizardStyle=modern 10 | DefaultDirName={autopf}\My Program 11 | DefaultGroupName=My Program 12 | UninstallDisplayIcon={app}\MyProg.exe 13 | Compression=lzma2 14 | SolidCompression=yes 15 | OutputDir=userdocs:Inno Setup Examples Output 16 | 17 | [Files] 18 | Source: "MyProg.exe"; DestDir: "{app}" 19 | Source: "MyProg.chm"; DestDir: "{app}" 20 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 21 | 22 | [Icons] 23 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 24 | -------------------------------------------------------------------------------- /isfiles/Examples/Example2.iss: -------------------------------------------------------------------------------- 1 | ; -- Example2.iss -- 2 | ; Same as Example1.iss, but creates its icon in the Programs folder of the 3 | ; Start Menu instead of in a subfolder, and also creates a desktop icon. 4 | 5 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 6 | 7 | [Setup] 8 | AppName=My Program 9 | AppVersion=1.5 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\My Program 12 | ; Since no icons will be created in "{group}", we don't need the wizard 13 | ; to ask for a Start Menu folder name: 14 | DisableProgramGroupPage=yes 15 | UninstallDisplayIcon={app}\MyProg.exe 16 | Compression=lzma2 17 | SolidCompression=yes 18 | OutputDir=userdocs:Inno Setup Examples Output 19 | 20 | [Files] 21 | Source: "MyProg.exe"; DestDir: "{app}" 22 | Source: "MyProg.chm"; DestDir: "{app}" 23 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 24 | 25 | [Icons] 26 | Name: "{autoprograms}\My Program"; Filename: "{app}\MyProg.exe" 27 | Name: "{autodesktop}\My Program"; Filename: "{app}\MyProg.exe" 28 | -------------------------------------------------------------------------------- /isfiles/Examples/Example3.iss: -------------------------------------------------------------------------------- 1 | ; -- Example3.iss -- 2 | ; Same as Example1.iss, but creates some registry entries too and allows the end 3 | ; use to choose the install mode (administrative or non administrative). 4 | 5 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 6 | 7 | [Setup] 8 | AppName=My Program 9 | AppVersion=1.5 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\My Program 12 | DefaultGroupName=My Program 13 | UninstallDisplayIcon={app}\MyProg.exe 14 | Compression=lzma2 15 | SolidCompression=yes 16 | OutputDir=userdocs:Inno Setup Examples Output 17 | ChangesAssociations=yes 18 | UserInfoPage=yes 19 | PrivilegesRequiredOverridesAllowed=dialog 20 | 21 | [Files] 22 | Source: "MyProg.exe"; DestDir: "{app}" 23 | Source: "MyProg.chm"; DestDir: "{app}" 24 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 25 | 26 | [Icons] 27 | Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 28 | 29 | ; NOTE: Most apps do not need registry entries to be pre-created. If you 30 | ; don't know what the registry is or if you need to use it, then chances are 31 | ; you don't need a [Registry] section. 32 | 33 | [Registry] 34 | ; Create "Software\My Company\My Program" keys under CURRENT_USER or 35 | ; LOCAL_MACHINE depending on administrative or non administrative install 36 | ; mode. The flags tell it to always delete the "My Program" key upon 37 | ; uninstall, and delete the "My Company" key if there is nothing left in it. 38 | Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 39 | Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 40 | Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Language"; ValueData: "{language}" 41 | ; Associate .myp files with My Program (requires ChangesAssociations=yes) 42 | Root: HKA; Subkey: "Software\Classes\.myp\OpenWithProgids"; ValueType: string; ValueName: "MyProgramFile.myp"; ValueData: ""; Flags: uninsdeletevalue 43 | Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey 44 | Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,0" 45 | Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MyProg.exe"" ""%1""" 46 | Root: HKA; Subkey: "Software\Classes\Applications\MyProg.exe\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: "" 47 | ; HKA (and HKCU) should only be used for settings which are compatible with 48 | ; roaming profiles so settings like paths should be written to HKLM, which 49 | ; is only possible in administrative install mode. 50 | Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty; Check: IsAdminInstallMode 51 | Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey; Check: IsAdminInstallMode 52 | Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: IsAdminInstallMode 53 | ; User specific settings should always be written to HKCU, which should only 54 | ; be done in non administrative install mode. 55 | Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserName"; ValueData: "{userinfoname}"; Check: not IsAdminInstallMode 56 | Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserOrganization"; ValueData: "{userinfoorg}"; Check: not IsAdminInstallMode 57 | 58 | [Code] 59 | function ShouldSkipPage(PageID: Integer): Boolean; 60 | begin 61 | // User specific pages should be skipped in administrative install mode 62 | Result := IsAdminInstallMode and (PageID = wpUserInfo); 63 | end; 64 | -------------------------------------------------------------------------------- /isfiles/Examples/ISPPExample1.iss: -------------------------------------------------------------------------------- 1 | // -- ISPPExample1.iss -- 2 | // 3 | // This script shows various basic things you can achieve using Inno Setup Preprocessor (ISPP). 4 | // To enable commented #define's, either remove the '//' or use ISCC with the /D switch. 5 | // 6 | #pragma verboselevel 9 7 | // 8 | //#define AppEnterprise 9 | // 10 | #ifdef AppEnterprise 11 | #define AppName "My Program Enterprise Edition" 12 | #else 13 | #define AppName "My Program" 14 | #endif 15 | // 16 | #define AppVersion GetVersionNumbersString(AddBackslash(SourcePath) + "MyProg.exe") 17 | // 18 | [Setup] 19 | AppName={#AppName} 20 | AppVersion={#AppVersion} 21 | WizardStyle=modern 22 | DefaultDirName={autopf}\{#AppName} 23 | DefaultGroupName={#AppName} 24 | UninstallDisplayIcon={app}\MyProg.exe 25 | LicenseFile={#file AddBackslash(SourcePath) + "ISPPExample1License.txt"} 26 | VersionInfoVersion={#AppVersion} 27 | OutputDir=userdocs:Inno Setup Examples Output 28 | 29 | [Files] 30 | Source: "MyProg.exe"; DestDir: "{app}" 31 | #ifdef AppEnterprise 32 | Source: "MyProg.chm"; DestDir: "{app}" 33 | #endif 34 | Source: "Readme.txt"; DestDir: "{app}"; \ 35 | Flags: isreadme 36 | 37 | [Icons] 38 | Name: "{group}\{#AppName}"; Filename: "{app}\MyProg.exe" 39 | -------------------------------------------------------------------------------- /isfiles/Examples/ISPPExample1License.txt: -------------------------------------------------------------------------------- 1 | #pragma option -e+ 2 | {#AppName} version {#AppVersion} License 3 | 4 | Bla bla bla -------------------------------------------------------------------------------- /isfiles/Examples/Languages.iss: -------------------------------------------------------------------------------- 1 | ; -- Languages.iss -- 2 | ; Demonstrates a multilingual installation. 3 | 4 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 5 | 6 | [Setup] 7 | AppName={cm:MyAppName} 8 | AppId=My Program 9 | AppVerName={cm:MyAppVerName,1.5} 10 | WizardStyle=modern 11 | DefaultDirName={autopf}\{cm:MyAppName} 12 | DefaultGroupName={cm:MyAppName} 13 | UninstallDisplayIcon={app}\MyProg.exe 14 | VersionInfoDescription=My Program Setup 15 | VersionInfoProductName=My Program 16 | OutputDir=userdocs:Inno Setup Examples Output 17 | ; Uncomment the following line to disable the "Select Setup Language" 18 | ; dialog and have it rely solely on auto-detection. 19 | ;ShowLanguageDialog=no 20 | 21 | [Languages] 22 | Name: en; MessagesFile: "compiler:Default.isl" 23 | Name: nl; MessagesFile: "compiler:Languages\Dutch.isl" 24 | Name: de; MessagesFile: "compiler:Languages\German.isl" 25 | 26 | [Messages] 27 | en.BeveledLabel=English 28 | nl.BeveledLabel=Nederlands 29 | de.BeveledLabel=Deutsch 30 | 31 | [CustomMessages] 32 | en.MyDescription=My description 33 | en.MyAppName=My Program 34 | en.MyAppVerName=My Program %1 35 | nl.MyDescription=Mijn omschrijving 36 | nl.MyAppName=Mijn programma 37 | nl.MyAppVerName=Mijn programma %1 38 | de.MyDescription=Meine Beschreibung 39 | de.MyAppName=Meine Anwendung 40 | de.MyAppVerName=Meine Anwendung %1 41 | 42 | [Files] 43 | Source: "MyProg.exe"; DestDir: "{app}" 44 | Source: "MyProg.chm"; DestDir: "{app}"; Languages: en 45 | Source: "Readme.txt"; DestDir: "{app}"; Languages: en; Flags: isreadme 46 | Source: "Readme-Dutch.txt"; DestName: "Leesmij.txt"; DestDir: "{app}"; Languages: nl; Flags: isreadme 47 | Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Languages: de; Flags: isreadme 48 | 49 | [Icons] 50 | Name: "{group}\{cm:MyAppName}"; Filename: "{app}\MyProg.exe" 51 | Name: "{group}\{cm:UninstallProgram,{cm:MyAppName}}"; Filename: "{uninstallexe}" 52 | 53 | [Tasks] 54 | ; The following task doesn't do anything and is only meant to show [CustomMessages] usage 55 | Name: mytask; Description: "{cm:MyDescription}" 56 | -------------------------------------------------------------------------------- /isfiles/Examples/License.txt: -------------------------------------------------------------------------------- 1 | This is the LICENSE file for My Program. 2 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/MyDll.dll -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C#/MyDll.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using System.Runtime.InteropServices; 4 | using RGiesecke.DllExport; 5 | 6 | namespace Mydll 7 | { 8 | public class Mydll 9 | { 10 | [DllExport("MyDllFunc", CallingConvention=CallingConvention.StdCall)] 11 | public static void MyDllFunc(IntPtr hWnd, [MarshalAs(UnmanagedType.LPStr)] string text, [MarshalAs(UnmanagedType.LPStr)] string caption, int options) 12 | { 13 | MessageBox(hWnd, text, caption, options); 14 | } 15 | 16 | [DllExport("MyDllFuncW", CallingConvention=CallingConvention.StdCall)] 17 | public static void MyDllFuncW(IntPtr hWnd, string text, string caption, int options) 18 | { 19 | MessageBox(hWnd, text, caption, options); 20 | } 21 | 22 | [DllImport("user32.dll", CharSet=CharSet.Auto)] 23 | static extern int MessageBox(IntPtr hWnd, String text, String caption, int options); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C#/MyDll.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {79237A5C-6C62-400A-BBDD-3DA1CA327973} 8 | Library 9 | Properties 10 | MyDll 11 | MyDll 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | .\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | x86 24 | 25 | 26 | pdbonly 27 | true 28 | .\ 29 | TRACE 30 | prompt 31 | 4 32 | x86 33 | 34 | 35 | 36 | packages\UnmanagedExports.1.2.7\lib\net\RGiesecke.DllExport.Metadata.dll 37 | False 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 63 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C#/MyDll.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.40629.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDll", "MyDll.csproj", "{79237A5C-6C62-400A-BBDD-3DA1CA327973}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C#/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MyDll")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MyDll")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("711cc3c2-07db-46ca-b34b-ba06f4edcbcd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C#/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C/MyDll.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void __stdcall MyDllFunc(HWND hWnd, char *lpText, char *lpCaption, UINT uType) 4 | { 5 | MessageBox(hWnd, lpText, lpCaption, uType); 6 | } -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C/MyDll.def: -------------------------------------------------------------------------------- 1 | EXPORTS 2 | MyDllFunc -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/C/MyDll.dsp: -------------------------------------------------------------------------------- 1 | # Microsoft Developer Studio Project File - Name="MyDll" - Package Owner=<4> 2 | # Microsoft Developer Studio Generated Build File, Format Version 6.00 3 | # ** DO NOT EDIT ** 4 | 5 | # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 6 | 7 | CFG=MyDll - Win32 Release 8 | !MESSAGE This is not a valid makefile. To build this project using NMAKE, 9 | !MESSAGE use the Export Makefile command and run 10 | !MESSAGE 11 | !MESSAGE NMAKE /f "MyDll.mak". 12 | !MESSAGE 13 | !MESSAGE You can specify a configuration when running NMAKE 14 | !MESSAGE by defining the macro CFG on the command line. For example: 15 | !MESSAGE 16 | !MESSAGE NMAKE /f "MyDll.mak" CFG="MyDll - Win32 Release" 17 | !MESSAGE 18 | !MESSAGE Possible choices for configuration are: 19 | !MESSAGE 20 | !MESSAGE "MyDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") 21 | !MESSAGE 22 | 23 | # Begin Project 24 | # PROP AllowPerConfigDependencies 0 25 | # PROP Scc_ProjName "" 26 | # PROP Scc_LocalPath "" 27 | CPP=cl.exe 28 | MTL=midl.exe 29 | RSC=rc.exe 30 | # PROP BASE Use_MFC 0 31 | # PROP BASE Use_Debug_Libraries 0 32 | # PROP BASE Output_Dir "Release" 33 | # PROP BASE Intermediate_Dir "Release" 34 | # PROP BASE Target_Dir "" 35 | # PROP Use_MFC 0 36 | # PROP Use_Debug_Libraries 0 37 | # PROP Output_Dir "." 38 | # PROP Intermediate_Dir "." 39 | # PROP Target_Dir "" 40 | # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c 41 | # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c 42 | # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 43 | # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 44 | # ADD BASE RSC /l 0x413 /d "NDEBUG" 45 | # ADD RSC /l 0x413 /d "NDEBUG" 46 | BSC32=bscmake.exe 47 | # ADD BASE BSC32 /nologo 48 | # ADD BSC32 /nologo 49 | LINK32=link.exe 50 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 51 | # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 52 | # Begin Target 53 | 54 | # Name "MyDll - Win32 Release" 55 | # Begin Group "Source Files" 56 | 57 | # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" 58 | # Begin Source File 59 | 60 | SOURCE=.\MyDll.c 61 | # End Source File 62 | # Begin Source File 63 | 64 | SOURCE=.\MyDll.def 65 | # End Source File 66 | # End Group 67 | # Begin Group "Header Files" 68 | 69 | # PROP Default_Filter "h;hpp;hxx;hm;inl" 70 | # End Group 71 | # Begin Group "Resource Files" 72 | 73 | # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" 74 | # End Group 75 | # End Target 76 | # End Project 77 | -------------------------------------------------------------------------------- /isfiles/Examples/MyDll/Delphi/MyDll.dpr: -------------------------------------------------------------------------------- 1 | library MyDll; 2 | 3 | uses 4 | Windows; 5 | 6 | procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: PAnsiChar; uType: Cardinal); stdcall; 7 | begin 8 | MessageBoxA(hWnd, lpText, lpCaption, uType); 9 | end; 10 | 11 | exports MyDllFunc; 12 | 13 | begin 14 | end. 15 | -------------------------------------------------------------------------------- /isfiles/Examples/MyProg-ARM64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/MyProg-ARM64.exe -------------------------------------------------------------------------------- /isfiles/Examples/MyProg-x64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/MyProg-x64.exe -------------------------------------------------------------------------------- /isfiles/Examples/MyProg.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/MyProg.chm -------------------------------------------------------------------------------- /isfiles/Examples/MyProg.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/MyProg.exe -------------------------------------------------------------------------------- /isfiles/Examples/Readme-Dutch.txt: -------------------------------------------------------------------------------- 1 | Dit is het Leesmij bestand voor My Program. -------------------------------------------------------------------------------- /isfiles/Examples/Readme-German.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Examples/Readme-German.txt -------------------------------------------------------------------------------- /isfiles/Examples/Readme.txt: -------------------------------------------------------------------------------- 1 | This is the README file for My Program. 2 | -------------------------------------------------------------------------------- /isfiles/Examples/UnicodeExample1.iss: -------------------------------------------------------------------------------- 1 | ; -- UnicodeExample1.iss -- 2 | ; Demonstrates some Unicode functionality. 3 | ; 4 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 5 | 6 | [Setup] 7 | AppName=ɯɐɹƃoɹd ʎɯ 8 | AppVerName=ɯɐɹƃoɹd ʎɯ version 1.5 9 | WizardStyle=modern 10 | DefaultDirName={autopf}\ɯɐɹƃoɹd ʎɯ 11 | DefaultGroupName=ɯɐɹƃoɹd ʎɯ 12 | UninstallDisplayIcon={app}\ƃoɹdʎɯ.exe 13 | Compression=lzma2 14 | SolidCompression=yes 15 | OutputDir=userdocs:Inno Setup Examples Output 16 | 17 | [Files] 18 | Source: "MyProg.exe"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.exe" 19 | Source: "MyProg.chm"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.chm" 20 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 21 | 22 | [Icons] 23 | Name: "{group}\ɯɐɹƃoɹd ʎɯ"; Filename: "{app}\ƃoɹdʎɯ.exe" 24 | 25 | [Code] 26 | function InitializeSetup: Boolean; 27 | begin 28 | MsgBox('ɯɐɹƃoɹd ʎɯ', mbInformation, MB_OK); 29 | Result := True; 30 | end; -------------------------------------------------------------------------------- /isfiles/Examples/UninstallCodeExample1.iss: -------------------------------------------------------------------------------- 1 | ; -- UninstallCodeExample1.iss -- 2 | ; 3 | ; This script shows various things you can achieve using a [Code] section for Uninstall. 4 | 5 | [Setup] 6 | AppName=My Program 7 | AppVersion=1.5 8 | WizardStyle=modern 9 | DefaultDirName={autopf}\My Program 10 | DefaultGroupName=My Program 11 | UninstallDisplayIcon={app}\MyProg.exe 12 | OutputDir=userdocs:Inno Setup Examples Output 13 | 14 | [Files] 15 | Source: "MyProg.exe"; DestDir: "{app}" 16 | Source: "MyProg.chm"; DestDir: "{app}" 17 | Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 18 | 19 | [Code] 20 | function InitializeUninstall(): Boolean; 21 | begin 22 | Result := MsgBox('InitializeUninstall:' #13#13 'Uninstall is initializing. Do you really want to start Uninstall?', mbConfirmation, MB_YESNO) = idYes; 23 | if Result = False then 24 | MsgBox('InitializeUninstall:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); 25 | end; 26 | 27 | procedure DeinitializeUninstall(); 28 | begin 29 | MsgBox('DeinitializeUninstall:' #13#13 'Bye bye!', mbInformation, MB_OK); 30 | end; 31 | 32 | procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 33 | begin 34 | case CurUninstallStep of 35 | usUninstall: 36 | begin 37 | MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall is about to start.', mbInformation, MB_OK) 38 | // ...insert code to perform pre-uninstall tasks here... 39 | end; 40 | usPostUninstall: 41 | begin 42 | MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); 43 | // ...insert code to perform post-uninstall tasks here... 44 | end; 45 | end; 46 | end; 47 | -------------------------------------------------------------------------------- /isfiles/ISCC.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/ISCC.exe -------------------------------------------------------------------------------- /isfiles/ISCmplr.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/ISCmplr.dll -------------------------------------------------------------------------------- /isfiles/ISPP.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/ISPP.chm -------------------------------------------------------------------------------- /isfiles/ISPP.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/ISPP.dll -------------------------------------------------------------------------------- /isfiles/ISPPBuiltins.iss: -------------------------------------------------------------------------------- 1 | // Inno Setup Preprocessor 2 | // 3 | // Inno Setup (C) 1997-2020 Jordan Russell. All Rights Reserved. 4 | // Portions Copyright (C) 2000-2020 Martijn Laan. All Rights Reserved. 5 | // Portions Copyright (C) 2001-2004 Alex Yackimoff. All Rights Reserved. 6 | // 7 | // See the ISPP help file for more documentation of the functions defined by this file 8 | // 9 | #if defined(ISPP_INVOKED) && !defined(_BUILTINS_ISS_) 10 | // 11 | #if PREPROCVER < 0x01000000 12 | # error Inno Setup Preprocessor version is outdated 13 | #endif 14 | // 15 | #define _BUILTINS_ISS_ 16 | // 17 | #ifdef __OPT_E__ 18 | # define private EnableOptE 19 | # pragma option -e- 20 | #endif 21 | 22 | #ifndef __POPT_P__ 23 | # define private DisablePOptP 24 | #else 25 | # pragma parseroption -p- 26 | #endif 27 | 28 | #define NewLine "\n" 29 | #define Tab "\t" 30 | 31 | #pragma parseroption -p+ 32 | 33 | #pragma spansymbol "\" 34 | 35 | #define True 1 36 | #define False 0 37 | #define Yes True 38 | #define No False 39 | 40 | #define MaxInt 0x7FFFFFFFFFFFFFFFL 41 | #define MinInt 0x8000000000000000L 42 | 43 | #define NULL 44 | #define void 45 | 46 | // TypeOf constants 47 | 48 | #define TYPE_ERROR 0 49 | #define TYPE_NULL 1 50 | #define TYPE_INTEGER 2 51 | #define TYPE_STRING 3 52 | #define TYPE_MACRO 4 53 | #define TYPE_FUNC 5 54 | #define TYPE_ARRAY 6 55 | 56 | // Helper macro to find out the type of an array element or expression. TypeOf 57 | // standard function only allows identifier as its parameter. Use this macro 58 | // to convert an expression to identifier. 59 | 60 | #define TypeOf2(any Expr) TypeOf(Expr) 61 | 62 | // ReadReg constants 63 | 64 | #define HKEY_CLASSES_ROOT 0x80000000UL 65 | #define HKEY_CURRENT_USER 0x80000001UL 66 | #define HKEY_LOCAL_MACHINE 0x80000002UL 67 | #define HKEY_USERS 0x80000003UL 68 | #define HKEY_CURRENT_CONFIG 0x80000005UL 69 | #define HKEY_CLASSES_ROOT_64 0x82000000UL 70 | #define HKEY_CURRENT_USER_64 0x82000001UL 71 | #define HKEY_LOCAL_MACHINE_64 0x82000002UL 72 | #define HKEY_USERS_64 0x82000003UL 73 | #define HKEY_CURRENT_CONFIG_64 0x82000005UL 74 | 75 | #define HKCR HKEY_CLASSES_ROOT 76 | #define HKCU HKEY_CURRENT_USER 77 | #define HKLM HKEY_LOCAL_MACHINE 78 | #define HKU HKEY_USERS 79 | #define HKCC HKEY_CURRENT_CONFIG 80 | #define HKCR64 HKEY_CLASSES_ROOT_64 81 | #define HKCU64 HKEY_CURRENT_USER_64 82 | #define HKLM64 HKEY_LOCAL_MACHINE_64 83 | #define HKU64 HKEY_USERS_64 84 | #define HKCC64 HKEY_CURRENT_CONFIG_64 85 | 86 | // Exec constants 87 | 88 | #define SW_HIDE 0 89 | #define SW_SHOWNORMAL 1 90 | #define SW_NORMAL 1 91 | #define SW_SHOWMINIMIZED 2 92 | #define SW_SHOWMAXIMIZED 3 93 | #define SW_MAXIMIZE 3 94 | #define SW_SHOWNOACTIVATE 4 95 | #define SW_SHOW 5 96 | #define SW_MINIMIZE 6 97 | #define SW_SHOWMINNOACTIVE 7 98 | #define SW_SHOWNA 8 99 | #define SW_RESTORE 9 100 | #define SW_SHOWDEFAULT 10 101 | #define SW_MAX 10 102 | 103 | // Find constants 104 | 105 | #define FIND_MATCH 0x00 106 | #define FIND_BEGINS 0x01 107 | #define FIND_ENDS 0x02 108 | #define FIND_CONTAINS 0x03 109 | #define FIND_CASESENSITIVE 0x04 110 | #define FIND_SENSITIVE FIND_CASESENSITIVE 111 | #define FIND_AND 0x00 112 | #define FIND_OR 0x08 113 | #define FIND_NOT 0x10 114 | #define FIND_TRIM 0x20 115 | 116 | // FindFirst constants 117 | 118 | #define faReadOnly 0x00000001 119 | #define faHidden 0x00000002 120 | #define faSysFile 0x00000004 121 | #define faVolumeID 0x00000008 122 | #define faDirectory 0x00000010 123 | #define faArchive 0x00000020 124 | #define faSymLink 0x00000040 125 | #define faAnyFile 0x0000003F 126 | 127 | // GetStringFileInfo standard names 128 | 129 | #define COMPANY_NAME "CompanyName" 130 | #define FILE_DESCRIPTION "FileDescription" 131 | #define FILE_VERSION "FileVersion" 132 | #define INTERNAL_NAME "InternalName" 133 | #define LEGAL_COPYRIGHT "LegalCopyright" 134 | #define ORIGINAL_FILENAME "OriginalFilename" 135 | #define PRODUCT_NAME "ProductName" 136 | #define PRODUCT_VERSION "ProductVersion" 137 | 138 | // GetStringFileInfo helpers 139 | 140 | #define GetFileCompany(str FileName) GetStringFileInfo(FileName, COMPANY_NAME) 141 | #define GetFileDescription(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION) 142 | #define GetFileVersionString(str FileName) GetStringFileInfo(FileName, FILE_VERSION) 143 | #define GetFileCopyright(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT) 144 | #define GetFileOriginalFilename(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME) 145 | #define GetFileProductVersion(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION) 146 | 147 | #define DeleteToFirstPeriod(str *S) \ 148 | Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \ 149 | S = Copy(S, Local[0] + 1), \ 150 | Local[1] 151 | 152 | #define GetVersionComponents(str FileName, *Major, *Minor, *Rev, *Build) \ 153 | Local[1] = Local[0] = GetVersionNumbersString(FileName), \ 154 | Local[1] == "" ? "" : ( \ 155 | Major = Int(DeleteToFirstPeriod(Local[1])), \ 156 | Minor = Int(DeleteToFirstPeriod(Local[1])), \ 157 | Rev = Int(DeleteToFirstPeriod(Local[1])), \ 158 | Build = Int(Local[1]), \ 159 | Local[0]) 160 | 161 | #define GetPackedVersion(str FileName, *Version) \ 162 | Local[0] = GetVersionComponents(FileName, Local[1], Local[2], Local[3], Local[4]), \ 163 | Version = PackVersionComponents(Local[1], Local[2], Local[3], Local[4]), \ 164 | Local[0] 165 | 166 | #define GetVersionNumbers(str FileName, *MS, *LS) \ 167 | Local[0] = GetPackedVersion(FileName, Local[1]), \ 168 | UnpackVersionNumbers(Local[1], MS, LS), \ 169 | Local[0] 170 | 171 | #define PackVersionNumbers(int VersionMS, int VersionLS) \ 172 | VersionMS << 32 | (VersionLS & 0xFFFFFFFF) 173 | 174 | #define PackVersionComponents(int Major, int Minor, int Rev, int Build) \ 175 | Major << 48 | (Minor & 0xFFFF) << 32 | (Rev & 0xFFFF) << 16 | (Build & 0xFFFF) 176 | 177 | #define UnpackVersionNumbers(int Version, *VersionMS, *VersionLS) \ 178 | VersionMS = Version >> 32, \ 179 | VersionLS = Version & 0xFFFFFFFF, \ 180 | void 181 | 182 | #define UnpackVersionComponents(int Version, *Major, *Minor, *Rev, *Build) \ 183 | Major = Version >> 48, \ 184 | Minor = (Version >> 32) & 0xFFFF, \ 185 | Rev = (Version >> 16) & 0xFFFF, \ 186 | Build = Version & 0xFFFF, \ 187 | void 188 | 189 | #define VersionToStr(int Version) \ 190 | Str(Version >> 48 & 0xFFFF) + "." + Str(Version >> 32 & 0xFFFF) + "." + \ 191 | Str(Version >> 16 & 0xFFFF) + "." + Str(Version & 0xFFFF) 192 | 193 | #define EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1) \ 194 | (Major & 0xFF) << 24 | (Minor & 0xFF) << 16 | (Revision & 0xFF) << 8 | (Build >= 0 ? Build & 0xFF : 0) 195 | 196 | #define DecodeVer(int Version, int Digits = 3) \ 197 | Str(Version >> 24 & 0xFF) + (Digits > 1 ? "." : "") + \ 198 | (Digits > 1 ? \ 199 | Str(Version >> 16 & 0xFF) + (Digits > 2 ? "." : "") : "") + \ 200 | (Digits > 2 ? \ 201 | Str(Version >> 8 & 0xFF) + (Digits > 3 && (Local = Version & 0xFF) ? "." : "") : "") + \ 202 | (Digits > 3 && Local ? \ 203 | Str(Version & 0xFF) : "") 204 | 205 | #define FindSection(str Section = "Files") \ 206 | Find(0, "[" + Section + "]", FIND_MATCH | FIND_TRIM) + 1 207 | 208 | #if VER >= 0x03000000 209 | # define FindNextSection(int Line) \ 210 | Find(Line, "[", FIND_BEGINS | FIND_TRIM, "]", FIND_ENDS | FIND_AND) 211 | # define FindSectionEnd(str Section = "Files") \ 212 | FindNextSection(FindSection(Section)) 213 | #else 214 | # define FindSectionEnd(str Section = "Files") \ 215 | FindSection(Section) + EntryCount(Section) 216 | #endif 217 | 218 | #define FindCode() \ 219 | Local[1] = FindSection("Code"), \ 220 | Local[0] = Find(Local[1] - 1, "program", FIND_BEGINS, ";", FIND_ENDS | FIND_AND), \ 221 | (Local[0] < 0 ? Local[1] : Local[0] + 1) 222 | 223 | #define ExtractFilePath(str PathName) \ 224 | (Local[0] = \ 225 | !(Local[1] = RPos("\", PathName)) ? \ 226 | "" : \ 227 | Copy(PathName, 1, Local[1] - 1)), \ 228 | Local[0] + \ 229 | ((Local[2] = Len(Local[0])) == 2 && Copy(Local[0], Local[2]) == ":" ? \ 230 | "\" : \ 231 | "") 232 | 233 | #define ExtractFileDir(str PathName) \ 234 | RemoveBackslash(ExtractFilePath(PathName)) 235 | 236 | #define ExtractFileExt(str PathName) \ 237 | Local[0] = RPos(".", PathName), \ 238 | Copy(PathName, Local[0] + 1) 239 | 240 | #define ExtractFileName(str PathName) \ 241 | !(Local[0] = RPos("\", PathName)) ? \ 242 | PathName : \ 243 | Copy(PathName, Local[0] + 1) 244 | 245 | #define ChangeFileExt(str FileName, str NewExt) \ 246 | !(Local[0] = RPos(".", FileName)) ? \ 247 | FileName + "." + NewExt : \ 248 | Copy(FileName, 1, Local[0]) + NewExt 249 | 250 | #define RemoveFileExt(str FileName) \ 251 | !(Local[0] = RPos(".", FileName)) ? \ 252 | FileName : \ 253 | Copy(FileName, 1, Local[0] - 1) 254 | 255 | #define AddBackslash(str S) \ 256 | Copy(S, Len(S)) == "\" ? S : S + "\" 257 | 258 | #define RemoveBackslash(str S) \ 259 | Local[0] = Len(S), \ 260 | Local[0] > 0 ? \ 261 | Copy(S, Local[0]) == "\" ? \ 262 | (Local[0] == 3 && Copy(S, 2, 1) == ":" ? \ 263 | S : \ 264 | Copy(S, 1, Local[0] - 1)) : \ 265 | S : \ 266 | "" 267 | 268 | #define Delete(str *S, int Index, int Count = MaxInt) \ 269 | S = Copy(S, 1, Index - 1) + Copy(S, Index + Count) 270 | 271 | #define Insert(str *S, int Index, str Substr) \ 272 | Index > Len(S) + 1 ? \ 273 | S : \ 274 | S = Copy(S, 1, Index - 1) + SubStr + Copy(S, Index) 275 | 276 | #define YesNo(str S) \ 277 | (S = LowerCase(S)) == "yes" || S == "true" || S == "1" 278 | 279 | #define IsDirSet(str SetupDirective) \ 280 | YesNo(SetupSetting(SetupDirective)) 281 | 282 | #define Power(int X, int P = 2) \ 283 | !P ? 1 : X * Power(X, P - 1) 284 | 285 | #define Min(int A, int B, int C = MaxInt) \ 286 | A < B ? A < C ? Int(A) : Int(C) : Int(B) 287 | 288 | #define Max(int A, int B, int C = MinInt) \ 289 | A > B ? A > C ? Int(A) : Int(C) : Int(B) 290 | 291 | #define SameText(str S1, str S2) \ 292 | LowerCase(S1) == LowerCase(S2) 293 | 294 | #define SameStr(str S1, str S2) \ 295 | S1 == S2 296 | 297 | #define WarnRenamedVersion(str OldName, str NewName) \ 298 | Warning("Function """ + OldName + """ has been renamed. Use """ + NewName + """ instead.") 299 | 300 | #define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \ 301 | WarnRenamedVersion("ParseVersion", "GetVersionComponents"), \ 302 | GetVersionComponents(FileName, Major, Minor, Rev, Build) 303 | 304 | #define GetFileVersion(str FileName) \ 305 | WarnRenamedVersion("GetFileVersion", "GetVersionNumbersString"), \ 306 | GetVersionNumbersString(FileName) 307 | 308 | #ifdef DisablePOptP 309 | # pragma parseroption -p- 310 | #endif 311 | 312 | #ifdef EnableOptE 313 | # pragma option -e+ 314 | #endif 315 | #endif -------------------------------------------------------------------------------- /isfiles/ISetup.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/ISetup.chm -------------------------------------------------------------------------------- /isfiles/Languages/Armenian.isl: -------------------------------------------------------------------------------- 1 | ; *** Inno Setup version 6.1.0+ Armenian messages *** 2 | ; 3 | ; Armenian translation by Hrant Ohanyan 4 | ; E-mail: h.ohanyan@haysoft.org 5 | ; Translation home page: http://www.haysoft.org 6 | ; Last modification date: 2020-10-06 7 | ; 8 | [LangOptions] 9 | LanguageName=Հայերեն 10 | LanguageID=$042B 11 | LanguageCodePage=0 12 | ; If the language you are translating to requires special font faces or 13 | ; sizes, uncomment any of the following entries and change them accordingly. 14 | ;DialogFontName= 15 | ;DialogFontSize=8 16 | ;WelcomeFontName=Verdana 17 | ;WelcomeFontSize=12 18 | ;TitleFontName=Arial 19 | ;TitleFontSize=29 20 | ;CopyrightFontName=Arial 21 | ;CopyrightFontSize=8 22 | 23 | [Messages] 24 | 25 | ; *** Application titles 26 | SetupAppTitle=Տեղադրում 27 | SetupWindowTitle=%1-ի տեղադրում 28 | UninstallAppTitle=Ապատեղադրում 29 | UninstallAppFullTitle=%1-ի ապատեղադրում 30 | 31 | ; *** Misc. common 32 | InformationTitle=Տեղեկություն 33 | ConfirmTitle=Հաստատել 34 | ErrorTitle=Սխալ 35 | 36 | ; *** SetupLdr messages 37 | SetupLdrStartupMessage=Այս ծրագիրը կտեղադրի %1-ը Ձեր համակարգչում։ Շարունակե՞լ։ 38 | LdrCannotCreateTemp=Հնարավոր չէ ստեղծել ժամանակավոր ֆայլ։ Տեղադրումը կասեցված է 39 | LdrCannotExecTemp=Հնարավոր չէ կատարել ֆայլը ժամանակավոր պանակից։ Տեղադրումը կասեցված է 40 | 41 | ; *** Startup error messages 42 | LastErrorMessage=%1.%n%nՍխալ %2: %3 43 | SetupFileMissing=%1 ֆայլը բացակայում է տեղադրման պանակից։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ 44 | SetupFileCorrupt=Տեղադրվող ֆայլերը վնասված են։ 45 | SetupFileCorruptOrWrongVer=Տեղադրվող ֆայլերը վնասված են կամ անհամատեղելի են տեղակայիչի այս տարբերակի հետ։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ 46 | InvalidParameter=Հրամանատողում նշված է սխալ հրաման.%n%n%1 47 | SetupAlreadyRunning=Տեղակայիչը արդեն աշխատեցված է։ 48 | WindowsVersionNotSupported=Ծրագիրը չի աջակցում այս համակարգչում աշխատող Windows-ի տարբերակը։ 49 | WindowsServicePackRequired=Ծրագիրը պահանջում է %1-ի Service Pack %2 կամ ավելի նոր։ 50 | NotOnThisPlatform=Այս ծրագիրը չի աշխատի %1-ում։ 51 | OnlyOnThisPlatform=Այս ծրագիրը հնարավոր է բացել միայն %1-ում։ 52 | OnlyOnTheseArchitectures=Այս ծրագրի տեղադրումը հնարավոր է միայն Windows-ի մշակիչի հետևյալ կառուցվածքներում՝ %n%n%1 53 | WinVersionTooLowError=Այս ծրագիրը պահանջում է %1-ի տարբերակ %2 կամ ավելի նորը։ 54 | WinVersionTooHighError=Ծրագիրը չի կարող տեղադրվել %1-ի տարբերակ %2 կամ ավելի նորում 55 | AdminPrivilegesRequired=Ծրագիրը տեղադրելու համար պահանջվում են Վարիչի իրավունքներ։ 56 | PowerUserPrivilegesRequired=Ծրագիրը տեղադրելու համար պետք է մուտք գործել համակարգ որպես Վարիչ կամ «Փորձառու օգտագործող» (Power Users): 57 | SetupAppRunningError=Տեղակայիչը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ 58 | UninstallAppRunningError=Ապատեղադրող ծրագիրը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ 59 | 60 | ; *** Startup questions 61 | PrivilegesRequiredOverrideTitle=Ընտրեք տեղակայիչի տեղադրման կերպը 62 | PrivilegesRequiredOverrideInstruction=Ընտրեք տեղադրման կերպը 63 | PrivilegesRequiredOverrideText1=%1-ը կարող է տեղադրվել բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ) կամ միայն ձեզ համար: 64 | PrivilegesRequiredOverrideText2=%1-ը կարող է տեղադրվել միայն ձեզ համար կամ բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ): 65 | PrivilegesRequiredOverrideAllUsers=Տեղադրել &բոլոր օգտվողների համար 66 | PrivilegesRequiredOverrideAllUsersRecommended=Տեղադրել &բոլոր օգտվողների համար (հանձնարարելի) 67 | PrivilegesRequiredOverrideCurrentUser=Տեղադրել միայն &ինձ համար 68 | PrivilegesRequiredOverrideCurrentUserRecommended=Տեղադրել միայն &ինձ համար (հանձնարարելի) 69 | 70 | ; *** Misc. errors 71 | ErrorCreatingDir=Հնարավոր չէ ստեղծել "%1" պանակը 72 | ErrorTooManyFilesInDir=Հնարավոր չէ ստեղծել ֆայլ "%1" պանակում, որովհետև նրանում կան չափից ավելի շատ ֆայլեր 73 | 74 | ; *** Setup common messages 75 | ExitSetupTitle=Տեղակայման ընդհատում 76 | ExitSetupMessage=Տեղակայումը չի ավարատվել։ Եթե ընդհատեք, ապա ծրագիրը չի տեղադրվի։%n%nԱվարտե՞լ։ 77 | AboutSetupMenuItem=&Ծրագրի մասին... 78 | AboutSetupTitle=Ծրագրի մասին 79 | AboutSetupMessage=%1, տարբերակ՝ %2%n%3%n%nՎեբ կայք՝ %1:%n%4 80 | AboutSetupNote= 81 | TranslatorNote=Armenian translation by Hrant Ohanyan »»» http://www.haysoft.org 82 | 83 | ; *** Buttons 84 | ButtonBack=« &Նախորդ 85 | ButtonNext=&Հաջորդ » 86 | ButtonInstall=&Տեղադրել 87 | ButtonOK=Լավ 88 | ButtonCancel=Չեղարկել 89 | ButtonYes=&Այո 90 | ButtonYesToAll=Այո բոլորի &համար 91 | ButtonNo=&Ոչ 92 | ButtonNoToAll=Ո&չ բոլորի համար 93 | ButtonFinish=&Ավարտել 94 | ButtonBrowse=&Ընտրել... 95 | ButtonWizardBrowse=&Ընտրել... 96 | ButtonNewFolder=&Ստեղծել պանակ 97 | 98 | ; *** "Select Language" dialog messages 99 | SelectLanguageTitle=Ընտրել տեղակայիչի լեզուն 100 | SelectLanguageLabel=Ընտրեք այն լեզուն, որը օգտագործվելու է տեղադրման ընթացքում: 101 | 102 | ; *** Common wizard text 103 | ClickNext=Սեղմեք «Հաջորդ»՝ շարունակելու համար կամ «Չեղարկել»՝ տեղակայիչը փակելու համար։ 104 | BeveledLabel= 105 | BrowseDialogTitle=Ընտրել պանակ 106 | BrowseDialogLabel=Ընտրեք պանակը ցանկից և սեղմեք «Լավ»։ 107 | NewFolderName=Նոր պանակ 108 | 109 | ; *** "Welcome" wizard page 110 | WelcomeLabel1=Ձեզ ողջունում է [name]-ի տեղակայման օգնականը 111 | WelcomeLabel2=Ծրագիրը կտեղադրի [name/ver]-ը Ձեր համակարգչում։%n%nՇարունակելուց առաջ խորհուրդ ենք տալիս փակել բոլոր աշխատող ծրագրերը։ 112 | 113 | ; *** "Password" wizard page 114 | WizardPassword=Գաղտնաբառ 115 | PasswordLabel1=Ծրագիրը պաշտպանված է գաղտնաբառով։ 116 | PasswordLabel3=Մուտքագրեք գաղտնաբառը և սեղմեք «Հաջորդ»։ 117 | PasswordEditLabel=&Գաղտնաբառ. 118 | IncorrectPassword=Մուտքագրված գաղտնաբառը սխալ է, կրկին փորձեք։ 119 | 120 | ; *** "License Agreement" wizard page 121 | WizardLicense=Արտոնագրային համաձայնագիր 122 | LicenseLabel=Խնդրում ենք շարունակելուց առաջ կարդալ հետևյալ տեղեկությունը։ 123 | LicenseLabel3=Կարդացեք արտոնագրային համաձայնագիրը։ Շարունակելուց առաջ պետք է ընդունեք նշված պայմանները։ 124 | LicenseAccepted=&Ընդունում եմ արտոնագրային համաձայնագիրը 125 | LicenseNotAccepted=&Չեմ ընդունում արտոնագրային համաձայնագիրը 126 | 127 | ; *** "Information" wizard pages 128 | WizardInfoBefore=Տեղեկություն 129 | InfoBeforeLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ 130 | InfoBeforeClickLabel=Եթե պատրաստ եք սեղմեք «Հաջորդը»։ 131 | WizardInfoAfter=Տեղեկություն 132 | InfoAfterLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ 133 | InfoAfterClickLabel=Երբ պատրաստ լինեք շարունակելու՝ սեղմեք «Հաջորդ»։ 134 | 135 | ; *** "User Information" wizard page 136 | WizardUserInfo=Տեղեկություն օգտվողի մասին 137 | UserInfoDesc=Գրեք տվյալներ Ձեր մասին 138 | UserInfoName=&Օգտվողի անուն և ազգանուն. 139 | UserInfoOrg=&Կազմակերպություն. 140 | UserInfoSerial=&Հերթական համար. 141 | UserInfoNameRequired=Պետք է գրեք Ձեր անունը։ 142 | 143 | ; *** "Select Destination Location" wizard page 144 | WizardSelectDir=Ընտրել տեղակադրման պանակը 145 | SelectDirDesc=Ո՞ր պանակում տեղադրել [name]-ը։ 146 | SelectDirLabel3=Ծրագիրը կտեղադրի [name]-ը հետևյալ պանակում։ 147 | SelectDirBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրել այլ պանակ՝ սեղմեք «Ընտրել»։ 148 | DiskSpaceGBLabel=Առնվազն [gb] ԳԲ ազատ տեղ է պահանջվում: 149 | DiskSpaceMBLabel=Առնվազն [mb] ՄԲ ազատ տեղ է պահանջվում: 150 | CannotInstallToNetworkDrive=Հնարավոր չէ տեղադրել Ցանցային հիշասարքում։ 151 | CannotInstallToUNCPath=Հնարավոր չէ տեղադրել UNC ուղիում։ 152 | InvalidPath=Պետք է նշեք ամբողջական ուղին՝ հիշասարքի տառով, օրինակ՝%n%nC:\APP%n%nկամ UNC ուղի՝ %n%n\\սպասարկիչի_անունը\ռեսուրսի_անունը 153 | InvalidDrive=Ընտրված հիշասարքը կամ ցանցային ուղին գոյություն չունեն կամ անհասանելի են։ Ընտրեք այլ ուղի։ 154 | DiskSpaceWarningTitle=Չկա պահանջվող չափով ազատ տեղ 155 | DiskSpaceWarning=Առնվազն %1 ԿԲ ազատ տեղ է պահանջվում, մինչդեռ հասանելի է ընդամենը %2 ԿԲ։%n%nԱյնուհանդերձ, շարունակե՞լ։ 156 | DirNameTooLong=Պանակի անունը կամ ուղին երկար են: 157 | InvalidDirName=Պանակի նշված անունը անընդունելի է։ 158 | BadDirName32=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 159 | DirExistsTitle=Թղթապանակը գոյություն ունի 160 | DirExists=%n%n%1%n%n պանակը արդեն գոյություն ունի։ Այնուհանդերձ, տեղադրե՞լ այստեղ։ 161 | DirDoesntExistTitle=Պանակ գոյություն չունի 162 | DirDoesntExist=%n%n%1%n%n պանակը գոյություն չունի։ Ստեղծե՞լ այն։ 163 | 164 | ; *** "Select Components" wizard page 165 | WizardSelectComponents=Ընտրել բաղադրիչներ 166 | SelectComponentsDesc=Ո՞ր ֆայլերը պետք է տեղադրվեն։ 167 | SelectComponentsLabel2=Նշեք այն ֆայլերը, որոնք պետք է տեղադրվեն, ապանշեք նրանք, որոնք չպետք է տեղադրվեն։ Սեղմեք «Հաջորդ»՝ շարունակելու համար։ 168 | FullInstallation=Լրիվ տեղադրում 169 | ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) 170 | CompactInstallation=Սեղմված տեղադրում 171 | CustomInstallation=Ընտրովի տեղադրում 172 | NoUninstallWarningTitle=Տեղակայվող ֆայլերը 173 | NoUninstallWarning=Տեղակայիչ ծրագիրը հայտնաբերել է, որ հետևյալ բաղադրիչները արդեն տեղադրված են Ձեր համակարգչում։ %n%n%1%n%nԱյս բաղադրիչների ընտրության վերակայումը չի ջնջի դրանք։%n%nՇարունակե՞լ։ 174 | ComponentSize1=%1 ԿԲ 175 | ComponentSize2=%1 ՄԲ 176 | ComponentsDiskSpaceGBLabel=Ընթացիկ ընտրումը պահանջում է առնվազն [gb] ԳԲ տեղ հիշասարքում: 177 | ComponentsDiskSpaceMBLabel=Տվյալ ընտրությունը պահանջում է ամենաքիչը [mb] ՄԲ տեղ հիշասարքում: 178 | 179 | ; *** "Select Additional Tasks" wizard page 180 | WizardSelectTasks=Լրացուցիչ առաջադրանքներ 181 | SelectTasksDesc=Ի՞նչ լրացուցիչ առաջադրանքներ պետք է կատարվեն։ 182 | SelectTasksLabel2=Ընտրեք լրացուցիչ առաջադրանքներ, որոնք պետք է կատարվեն [name]-ի տեղադրման ընթացքում, ապա սեղմեք «Հաջորդ». 183 | 184 | ; *** "Select Start Menu Folder" wizard page 185 | WizardSelectProgramGroup=Ընտրել «Մեկնարկ» ցանկի պանակը 186 | SelectStartMenuFolderDesc=Որտե՞ղ ստեղծել դյուրանցումներ. 187 | SelectStartMenuFolderLabel3=Ծրագիրը կստեղծի դյուրանցումներ «Մեկնարկ» ցանկի հետևյալ պանակում։ 188 | SelectStartMenuFolderBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրեք այլ պանակ՝ սեղմեք «Ընտրել»։ 189 | MustEnterGroupName=Պետք է գրել պանակի անունը։ 190 | GroupNameTooLong=Պանակի անունը կամ ուղին շատ երկար են։ 191 | InvalidGroupName=Նշված անունը անընդունելի է։ 192 | BadGroupName=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 193 | NoProgramGroupCheck2=&Չստեղծել պանակ «Մեկնարկ» ցանկում 194 | 195 | ; *** "Ready to Install" wizard page 196 | WizardReady=Պատրաստ է 197 | ReadyLabel1=Տեղակայիչը պատրաստ է սկսել [name]-ի տեղադրումը։ 198 | ReadyLabel2a=Սեղմեք «Տեղադրել»՝ շարունակելու համար կամ «Նախորդ»՝ եթե ցանկանում եք դիտել կամ փոփոխել տեղադրելու կարգավորումները։ 199 | ReadyLabel2b=Սեղմեք «Տեղադրել»՝ շարունակելու համար։ 200 | ReadyMemoUserInfo=Տեղեկություն օգտվողի մասին. 201 | ReadyMemoDir=Տեղադրելու պանակ. 202 | ReadyMemoType=Տեղադրման ձև. 203 | ReadyMemoComponents=Ընտրված բաղադրիչներ. 204 | ReadyMemoGroup=Թղթապանակ «Մեկնարկ» ցանկում. 205 | ReadyMemoTasks=Լրացուցիչ առաջադրանքներ. 206 | ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile 207 | DownloadingLabel=Լրացուցիչ ֆայլերի ներբեռնում... 208 | ButtonStopDownload=&Կանգնեցնել ներբեռնումը 209 | StopDownload=Համոզվա՞ծ եք, որ պետք է կանգնեցնել ներբեռնումը: 210 | ErrorDownloadAborted=Ներբեռնումը կասեցված է 211 | ErrorDownloadFailed=Ներբեռնումը ձախողվեց. %1 %2 212 | ErrorDownloadSizeFailed=Չափի ստացումը ձախողվեց. %1 %2 213 | ErrorFileHash1=Ֆահլի հաշվեգումարը ձախողվեց. %1 214 | ErrorFileHash2=Ֆայլի անվավեր հաշվեգումար. ակընկալվում էր %1, գտնվել է %2 215 | ErrorProgress=Անվավեր ընթացք. %1-ը %2-ից 216 | ErrorFileSize=Ֆայլի անվավեր աչփ. ակընկալվում էր %1, գտնվել է %2 217 | ; *** "Preparing to Install" wizard page 218 | WizardPreparing=Նախատրաստում է տեղադրումը 219 | PreparingDesc=Տեղակայիչը պատրաստվում է տեղադրել [name]-ը ձեր համակարգչում։ 220 | PreviousInstallNotCompleted=Այլ ծրագրի տեղադրումը կամ ապատեղադրումը չի ավարտվել։ Այն ավարտելու համար պետք է վերամեկնարկեք համակարգիչը։%n%nՎերամեկնարկելուց հետո կրկին բացեք տեղակայման փաթեթը՝ [name]-ի տեղադրումը ավարտելու համար։ 221 | CannotContinue=Հնարավոր չէ շարունակել։ Սեղմեք «Չեղարկել»՝ ծրագիրը փակելու համար։ 222 | ApplicationsFound=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ 223 | ApplicationsFound2=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ Տեղադրումը ավարտելուց հետո տեղակայիչը կփորձի վերամեկնարկել այդ ծրագրերը։ 224 | CloseApplications=&Ինքնաբար փակել ծրագրերը 225 | DontCloseApplications=&Չփակել ծրագրերը 226 | ErrorCloseApplications=Տեղակայիչը չկարողացավ ինքնաբար փակել բոլոր ծրագրերը: Խորհուրդ ենք տալիս փակել այն բոլոր ծրագրերը, որոնք պետք է թարմացվեն տեղակայիչի կողմից: 227 | PrepareToInstallNeedsRestart=Տեղակայիչը պետք է վերամեկնարկի ձեր համակարգիչը: Դրանից հետո կրկին աշխատեցրեք այն՝ ավարտելու համար [name]-ի տեղադրումը:%n%nՑանկանո՞ւմ եք վերամեկնարկել հիմա: 228 | 229 | ; *** "Installing" wizard page 230 | WizardInstalling=Տեղադրում 231 | InstallingLabel=Խնդրում ենք սպասել մինչ [name]-ը կտեղադրվի Ձեր համակարգչում։ 232 | 233 | ; *** "Setup Completed" wizard page 234 | FinishedHeadingLabel=[name]-ի տեղադրման ավարտ 235 | FinishedLabelNoIcons=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ 236 | FinishedLabel=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ 237 | ClickFinish=Սեղմեք «Ավարտել»՝ տեղակայիչը փակելու համար։ 238 | FinishedRestartLabel=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ վերամեկնարկե՞լ հիմա։ 239 | FinishedRestartMessage=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ %n%վերամեկնարկե՞լ հիմա։ 240 | ShowReadmeCheck=Նայել README ֆայլը։ 241 | YesRadio=&Այո, վերամեկնարկել 242 | NoRadio=&Ոչ, ես հետո վերամեկնարկեմ 243 | ; used for example as 'Run MyProg.exe' 244 | RunEntryExec=Աշխատեցնել %1-ը 245 | ; used for example as 'View Readme.txt' 246 | RunEntryShellExec=Նայել %1-ը 247 | 248 | ; *** "Setup Needs the Next Disk" stuff 249 | ChangeDiskTitle=Տեղակայիչը պահանջում է հաջորդ սկավառակը 250 | SelectDiskLabel2=Զետեղեք %1 սկավառակը և սեղմեք «Լավ»։ %n%nԵթե ֆայլերի պանակը գտնվում է այլ տեղ, ապա ընտրեք ճիշտ ուղին կամ սեղմեք «Ընտրել»։ 251 | PathLabel=&Ուղին. 252 | FileNotInDir2="%1" ֆայլը չի գտնվել "%2"-ում։ Զետեղեք ճիշտ սկավառակ կամ ընտրեք այլ պանակ։ 253 | SelectDirectoryLabel=Խնդրում ենք նշել հաջորդ սկավառակի տեղադրությունը։ 254 | 255 | ; *** Installation phase messages 256 | SetupAborted=Տեղակայումը չի ավարտվել։ %n%nՈւղղեք խնդիրը և կրկին փորձեք։ 257 | AbortRetryIgnoreSelectAction=Ընտրեք գործողություն 258 | AbortRetryIgnoreRetry=&Կրկին փորձել 259 | AbortRetryIgnoreIgnore=&Անտեսել սխալը և շարունակել 260 | AbortRetryIgnoreCancel=Չեղարկել տեղադրումը 261 | 262 | ; *** Installation status messages 263 | StatusClosingApplications=Փակում է ծրագրերը... 264 | StatusCreateDirs=Պանակների ստեղծում... 265 | StatusExtractFiles=Ֆայլերի դուրս բերում... 266 | StatusCreateIcons=Դյուրանցումների ստեղծում... 267 | StatusCreateIniEntries=INI ֆայլերի ստեղծում... 268 | StatusCreateRegistryEntries=Գրանցամատյանի գրանցումների ստեղծում... 269 | StatusRegisterFiles=Ֆայլերի գրանցում... 270 | StatusSavingUninstall=Ապատեղադրելու տեղեկության պահում... 271 | StatusRunProgram=Տեղադրելու ավարտ... 272 | StatusRestartingApplications=Ծրագրերի վերամեկնարկում... 273 | StatusRollback=Փոփոխությունների հետ բերում... 274 | 275 | ; *** Misc. errors 276 | ErrorInternal2=Ներքին սխալ %1 277 | ErrorFunctionFailedNoCode=%1. վթար 278 | ErrorFunctionFailed=%1. վթար, կոդը՝ %2 279 | ErrorFunctionFailedWithMessage=%1. վթար, կոդը՝ %2.%n%3 280 | ErrorExecutingProgram=Հնարավոր չէ կատարել %n%1 ֆայլը 281 | 282 | ; *** Registry errors 283 | ErrorRegOpenKey=Գրանցամատյանի բանալին բացելու սխալ՝ %n%1\%2 284 | ErrorRegCreateKey=Գրանցամատյանի բանալին ստեղծելու սխալ՝ %n%1\%2 285 | ErrorRegWriteKey=Գրանցամատյանի բանալիում գրանցում կատարելու սխալ՝ %n%1\%2 286 | 287 | ; *** INI errors 288 | ErrorIniEntry=Սխալ՝ "%1" INI ֆայլում գրառում կատարելիս։ 289 | 290 | ; *** File copying errors 291 | FileAbortRetryIgnoreSkipNotRecommended=Բաց թողնել այս ֆայլը (խորհուրդ չի տրվում) 292 | FileAbortRetryIgnoreIgnoreNotRecommended=Անտեսել սխալը և շարունակել (խորհուրդ չի տրվում) 293 | SourceIsCorrupted=Սկզբնական ֆայլը վնասված է։ 294 | SourceDoesntExist=Սկզբնական "%1" ֆայլը գոյություն չունի 295 | ExistingFileReadOnly2=Առկա ֆայլը չի կարող փոխարինվել, քանի որ այն նշված է որպես միայն կարդալու: 296 | ExistingFileReadOnlyRetry=&Հեռացրեք միայն կարդալ հատկանիշը և կրկին փորձեք 297 | ExistingFileReadOnlyKeepExisting=&Պահել առկա ֆայլը 298 | ErrorReadingExistingDest=Սխալ՝ ֆայլը կարդալիս. 299 | FileExistsSelectAction=Ընտրեք գործողություն 300 | FileExists2=Ֆայլը գոյություն չունի 301 | FileExistsOverwriteExisting=&Վրագրել առկա ֆայլը 302 | FileExistsKeepExisting=&Պահել առկա ֆայլը 303 | FileExistsOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ 304 | ExistingFileNewerSelectAction=Ընտրեք գործողություն 305 | ExistingFileNewer2=Առկա ֆայլը ավելի նոր է, քան այն, որ տեղակայիչը փորձում է տեղադրել: 306 | ExistingFileNewerOverwriteExisting=&Վրագրել առկա ֆայլը 307 | ExistingFileNewerKeepExisting=&Պահել առկա ֆայլը (հանձնարարելի) 308 | ExistingFileNewerOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ 309 | ErrorChangingAttr=Սխալ՝ ընթացիկ ֆայլի հատկանիշները փոխելիս. 310 | ErrorCreatingTemp=Սխալ՝ նշված պանակում ֆայլ ստեղծելիս. 311 | ErrorReadingSource=Սխալ՝ ֆայլը կարդալիս. 312 | ErrorCopying=Սխալ՝ ֆայլը պատճենելիս. 313 | ErrorReplacingExistingFile=Սխալ՝ գոյություն ունեցող ֆայլը փոխարինելիս. 314 | ErrorRestartReplace=RestartReplace ձախողում. 315 | ErrorRenamingTemp=Սխալ՝ նպատակակետ պանակում՝ ֆայլը վերանվանելիս. 316 | ErrorRegisterServer=Հնարավոր չէ գրանցել DLL/OCX-ը. %1 317 | ErrorRegSvr32Failed=RegSvr32-ի ձախողում, կոդ՝ %1 318 | ErrorRegisterTypeLib=Հնարավոր չէ գրանցել դարանները՝ %1 319 | ; *** Uninstall display name markings 320 | ; used for example as 'My Program (32-bit)' 321 | UninstallDisplayNameMark=%1 (%2) 322 | ; used for example as 'My Program (32-bit, All users)' 323 | UninstallDisplayNameMarks=%1 (%2, %3) 324 | UninstallDisplayNameMark32Bit=32 բիթային 325 | UninstallDisplayNameMark64Bit=64 բիթային 326 | UninstallDisplayNameMarkAllUsers=Բոլոր օգտվողները 327 | UninstallDisplayNameMarkCurrentUser=Ընթացիկ օգտվողը 328 | 329 | ; *** Post-installation errors 330 | ErrorOpeningReadme=Սխալ՝ README ֆայլը բացելիս։ 331 | ErrorRestartingComputer=Հնարավոր չեղավ վերամեկնարկել համակարգիչը։ Ինքներդ փորձեք։ 332 | 333 | ; *** Uninstaller messages 334 | UninstallNotFound="%1" ֆայլը գոյություն չունի։ Հնարավոր չէ ապատեղադրել։ 335 | UninstallOpenError="%1" ֆայլը հնարավոր չէ բացել: Հնարավոր չէ ապատեղադրել 336 | UninstallUnsupportedVer=Ապատեղադրելու "%1" մատյանի ֆայլը անճանաչելի է ապատեղադրող ծրագրի այս տարբերակի համար։ Հնարավոր չէ ապատեղադրել 337 | UninstallUnknownEntry=Անհայտ գրառում է (%1)՝ հայնաբերվել ապատեղադրելու մատյանում 338 | ConfirmUninstall=Ապատեղադրե՞լ %1-ը և նրա բոլոր բաղադրիչները։ 339 | UninstallOnlyOnWin64=Հնարավոր է ապատեղադրել միայն 64 բիթանոց Windows-ում։ 340 | OnlyAdminCanUninstall=Հնարավոր է ապատեղադրել միայն Ադմինի իրավունքներով։ 341 | UninstallStatusLabel=Խնդրում ենք սպասել, մինչև %1-ը ապատեղադրվում է Ձեր համակարգչից։ 342 | UninstalledAll=%1 ծրագիրը ապատեղադրվել է համակարգչից։ 343 | UninstalledMost=%1-ը ապատեղադրվեց Ձեր համակարգչից։%n%nՈրոշ ֆայլեր հնարավոր չեղավ հեռացնել։ Ինքներդ հեռացրեք դրանք։ 344 | UninstalledAndNeedsRestart=%1-ի ապատեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։%n%nՎերամեկնարկե՞լ։ 345 | UninstallDataCorrupted="%1" ֆայլը վնասված է։ Հնարավոր չէ ապատեղադրել 346 | 347 | ; *** Uninstallation phase messages 348 | ConfirmDeleteSharedFileTitle=Հեռացնե՞լ համատեղ օգտագործվող ֆայլը։ 349 | ConfirmDeleteSharedFile2=Համակարգը նշում է, որ հետևյալ համատեղ օգտագործվող ֆայլը այլևս չի օգտագործվում այլ ծրագրի կողմից։ Ապատեղադրե՞լ այն։ %n%nԵթե համոզված չեք սեղմեք «Ոչ»։ 350 | SharedFileNameLabel=Ֆայլի անուն. 351 | SharedFileLocationLabel=Տեղադրություն. 352 | WizardUninstalling=Ապատեղադրելու վիճակ 353 | StatusUninstalling=%1-ի ապատեղադրում... 354 | 355 | ; *** Shutdown block reasons 356 | ShutdownBlockReasonInstallingApp=%1-ի տեղադրում։ 357 | ShutdownBlockReasonUninstallingApp=%1-ի ապատեղադրում։ 358 | 359 | ; The custom messages below aren't used by Setup itself, but if you make 360 | ; use of them in your scripts, you'll want to translate them. 361 | 362 | [CustomMessages] 363 | 364 | NameAndVersion=%1 տարբերակ՝ %2 365 | AdditionalIcons=Լրացուցիչ դյուրանցումներ 366 | CreateDesktopIcon=Ստեղծել դյուրանցում &Աշխատասեղանին 367 | CreateQuickLaunchIcon=Ստեղծել դյուրանցում &Արագ թողարկման գոտում 368 | ProgramOnTheWeb=%1-ի վեբ կայքը 369 | UninstallProgram=%1-ի ապատեղադրում 370 | LaunchProgram=Բացել %1-ը 371 | AssocFileExtension=Հա&մակցել %1-ը %2 ֆայլերի հետ։ 372 | AssocingFileExtension=%1-ը համակցվում է %2 ընդլայնումով ֆայլերի հետ... 373 | AutoStartProgramGroupDescription=Ինքնամեկնարկ. 374 | AutoStartProgram=Ինքնաբար մեկնարկել %1-ը 375 | AddonHostProgramNotFound=%1 չի կարող տեղադրվել Ձեր ընտրած պանակում։%n%nՇարունակե՞լ։ 376 | 377 | -------------------------------------------------------------------------------- /isfiles/Languages/BrazilianPortuguese.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/BrazilianPortuguese.isl -------------------------------------------------------------------------------- /isfiles/Languages/Catalan.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Catalan.isl -------------------------------------------------------------------------------- /isfiles/Languages/Czech.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Czech.isl -------------------------------------------------------------------------------- /isfiles/Languages/Danish.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Danish.isl -------------------------------------------------------------------------------- /isfiles/Languages/Finnish.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Finnish.isl -------------------------------------------------------------------------------- /isfiles/Languages/Hebrew.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Hebrew.isl -------------------------------------------------------------------------------- /isfiles/Languages/Icelandic.isl: -------------------------------------------------------------------------------- 1 | ; *** Inno Setup version 6.1.0+ Icelandic messages *** 2 | ; 3 | ; Translator: Stefán Örvar Sigmundsson, eMedia Intellect 4 | ; Contact: emi@emi.is 5 | ; Date: 2020-07-25 6 | 7 | [LangOptions] 8 | 9 | LanguageName=<00CD>slenska 10 | LanguageID=$040F 11 | LanguageCodePage=1252 12 | 13 | [Messages] 14 | 15 | ; *** Application titles 16 | SetupAppTitle=Uppsetning 17 | SetupWindowTitle=Uppsetning - %1 18 | UninstallAppTitle=Niðurtaka 19 | UninstallAppFullTitle=%1-niðurtaka 20 | 21 | ; *** Misc. common 22 | InformationTitle=Upplýsingar 23 | ConfirmTitle=Staðfesta 24 | ErrorTitle=Villa 25 | 26 | ; *** SetupLdr messages 27 | SetupLdrStartupMessage=Þetta mun uppsetja %1. Vilt þú halda áfram? 28 | LdrCannotCreateTemp=Ófært um að skapa tímabundna skrá. Uppsetningu hætt 29 | LdrCannotExecTemp=Ófært um að keyra skrá í tímabundna skráasafninu. Uppsetningu hætt 30 | HelpTextNote= 31 | 32 | ; *** Startup error messages 33 | LastErrorMessage=%1.%n%nVilla %2: %3 34 | SetupFileMissing=Skrána %1 vantar úr uppsetningarskráasafninu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrita af forritinu. 35 | SetupFileCorrupt=Uppsetningarskrárnar eru spilltar. Vinsamlega fáðu nýtt afrita af forritinu. 36 | SetupFileCorruptOrWrongVer=Uppsetningarskrárnar eru spilltar eða eru ósamrýmanlegar við þessa útgáfu af Uppsetningu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrit af forritinu. 37 | InvalidParameter=Ógild færibreyta var afhend á skipanalínunni:%n%n%1 38 | SetupAlreadyRunning=Uppsetning er nú þegar keyrandi. 39 | WindowsVersionNotSupported=Þetta forrit styður ekki útgáfuna af Windows sem tölvan þín er keyrandi. 40 | WindowsServicePackRequired=Þetta forrit krefst Þjónustupakka %2 eða síðari. 41 | NotOnThisPlatform=Þetta forrit mun ekki keyra á %1. 42 | OnlyOnThisPlatform=Þetta forrit verður að keyra á %1. 43 | OnlyOnTheseArchitectures=Þetta forrit er einungis hægt að uppsetja á útgáfur af Windows hannaðar fyrir eftirfarandi gjörvahannanir:%n%n%1 44 | WinVersionTooLowError=Þetta forrit krefst %1-útgáfu %2 eða síðari. 45 | WinVersionTooHighError=Þetta forrit er ekki hægt að uppsetja á %1-útgáfu %2 eða síðari. 46 | AdminPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi meðan þú uppsetur þetta forrit. 47 | PowerUserPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi eða sem meðlimur Power Users-hópsins meðan þú uppsetur þetta forrit. 48 | SetupAppRunningError=Uppsetning hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. 49 | UninstallAppRunningError=Niðurtaka hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. 50 | 51 | ; *** Startup questions 52 | PrivilegesRequiredOverrideTitle=Veldu uppsetningarham 53 | PrivilegesRequiredOverrideInstruction=Veldu uppsetningarham 54 | PrivilegesRequiredOverrideText1=%1 er hægt að setja upp fyrir alla notendur (krefst stjórnandaréttinda) eða fyrir þig einungis. 55 | PrivilegesRequiredOverrideText2=%1 er hægt að setja upp fyrir þig einungis eða fyrir alla notendur (krefst stjórnandaréttinda). 56 | PrivilegesRequiredOverrideAllUsers=Uppsetja fyrir &alla notendur 57 | PrivilegesRequiredOverrideAllUsersRecommended=Uppsetja fyrir &alla notendur (ráðlagt) 58 | PrivilegesRequiredOverrideCurrentUser=Uppsetja fyrir &mig einungis 59 | PrivilegesRequiredOverrideCurrentUserRecommended=Uppsetja fyrir &mig einungis (ráðlagt) 60 | 61 | ; *** Misc. errors 62 | ErrorCreatingDir=Uppsetningunni var ófært um að skapa skráasafnið „%1“ 63 | ErrorTooManyFilesInDir=Ófært um að skapa skrá í skráasafninu „%1“ vegna þess það inniheldur of margar skrár 64 | 65 | ; *** Setup common messages 66 | ExitSetupTitle=Hætta í Uppsetningu 67 | ExitSetupMessage=Uppsetningu er ekki lokið. Ef þú hættir núna mun forritið ekki vera uppsett.%n%nÞú getur keyrt Uppsetningu aftur síðar til að ljúka uppsetningunni.%n%nHætta í Uppsetningu? 68 | AboutSetupMenuItem=&Um Uppsetningu… 69 | AboutSetupTitle=Um Uppsetningu 70 | AboutSetupMessage=%1 útgáfa %2%n%3%n%n%1 heimasíðu:%n%4 71 | AboutSetupNote= 72 | TranslatorNote=Stefán Örvar Sigmundsson, eMedia Intellect 73 | 74 | ; *** Buttons 75 | ButtonBack=< &Fyrri 76 | ButtonNext=&Næst > 77 | ButtonInstall=&Uppsetja 78 | ButtonOK=Í lagi 79 | ButtonCancel=Hætta við 80 | ButtonYes=&Já 81 | ButtonYesToAll=Já við &öllu 82 | ButtonNo=&Nei 83 | ButtonNoToAll=&Nei við öllu 84 | ButtonFinish=&Ljúka 85 | ButtonBrowse=&Vafra… 86 | ButtonWizardBrowse=&Vafra… 87 | ButtonNewFolder=&Skapa nýja möppu 88 | 89 | ; *** "Select Language" dialog messages 90 | SelectLanguageTitle=Veldu tungumál Uppsetningar 91 | SelectLanguageLabel=Veldu tungumálið sem nota á við uppsetninguna. 92 | 93 | ; *** Common wizard text 94 | ClickNext=Smelltu á Næst til að halda áfram eða Hætta við til að hætta Uppsetningu. 95 | BeveledLabel= 96 | BrowseDialogTitle=Vafra eftir möppu 97 | BrowseDialogLabel=Veldu möppu í listanum fyrir neðan, smelltu síðan á Í lagi. 98 | NewFolderName=Ný mappa 99 | 100 | ; *** "Welcome" wizard page 101 | WelcomeLabel1=Velkomin(n) í [name]-uppsetningaraðstoðarann 102 | WelcomeLabel2=Þetta mun uppsetja [name/ver] á þína tölvu.%n%nÞað er ráðlagt að þú lokir öllum öðrum hugbúnaði áður en haldið er áfram. 103 | 104 | ; *** "Password" wizard page 105 | WizardPassword=Aðgangsorð 106 | PasswordLabel1=Þessi uppsetning er aðgangsorðsvarin. 107 | PasswordLabel3=Vinsamlega veitu aðgangsorðið, smelltu síðan á Næst til að halda áfram. Aðgangsorð eru hástafanæm. 108 | PasswordEditLabel=&Aðgangsorð: 109 | IncorrectPassword=Aðgangsorðið sem þú innslóst er ekki rétt. Vinsamlega reyndu aftur. 110 | 111 | ; *** "License Agreement" wizard page 112 | WizardLicense=Leyfissamningur 113 | LicenseLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. 114 | LicenseLabel3=Vinsamlega lestu eftirfarandi leyfissamning. Þú verður að samþykkja skilmála samningsins áður en haldið er áfram með uppsetninguna. 115 | LicenseAccepted=Ég &samþykki samninginn 116 | LicenseNotAccepted=Ég samþykki &ekki samninginn 117 | 118 | ; *** "Information" wizard pages 119 | WizardInfoBefore=Upplýsingar 120 | InfoBeforeLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. 121 | InfoBeforeClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. 122 | WizardInfoAfter=Upplýsingar 123 | InfoAfterLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. 124 | InfoAfterClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. 125 | 126 | ; *** "User Information" wizard page 127 | WizardUserInfo=Notandaupplýsingar 128 | UserInfoDesc=Vinsamlega innsláðu upplýsingarnar þínar. 129 | UserInfoName=&Notandanafn: 130 | UserInfoOrg=&Stofnun: 131 | UserInfoSerial=&Raðnúmer: 132 | UserInfoNameRequired=Þú verður að innslá nafn. 133 | 134 | ; *** "Select Destination Location" wizard page 135 | WizardSelectDir=Velja staðsetningu 136 | SelectDirDesc=Hvar ætti [name] að vera uppsettur? 137 | SelectDirLabel3=Uppsetning mun uppsetja [name] í hina eftirfarandi möppu. 138 | SelectDirBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. 139 | DiskSpaceGBLabel=Að minnsta kosti [gb] GB af lausu diskplássi er krafist. 140 | DiskSpaceMBLabel=Að minnsta kosti [mb] MB af lausu diskplássi er krafist. 141 | CannotInstallToNetworkDrive=Uppsetning getur ekki uppsett á netdrif. 142 | CannotInstallToUNCPath=Uppsetning getur ekki uppsett á UNC-slóð. 143 | InvalidPath=Þú verður að innslá fulla slóð með drifstaf; til dæmis:%n%nC:\APP%n%neða UNC-slóð samkvæmt sniðinu:%n%n\\server\share 144 | InvalidDrive=Drifið eða UNC-deilingin sem þú valdir er ekki til eða er ekki aðgengileg. Vinsamlega veldu annað. 145 | DiskSpaceWarningTitle=Ekki nóg diskpláss 146 | DiskSpaceWarning=Uppsetning krefst að minnsta kosti %1 KB af lausu plássi til að uppsetja, en hið valda drif hefur einungis %2 KB tiltæk.%n%nVilt þú halda áfram hvort sem er? 147 | DirNameTooLong=Möppunafnið eða slóðin er of löng. 148 | InvalidDirName=Möppunafnið er ekki gilt. 149 | BadDirName32=Möppunöfn geta ekki innihaldið nein af hinum eftirfarandi rittáknum:%n%n%1 150 | DirExistsTitle=Mappa er til 151 | DirExists=Mappan:%n%n%1%n%ner nú þegar til. Vilt þú uppsetja í þá möppu hvort sem er? 152 | DirDoesntExistTitle=Mappa er ekki til 153 | DirDoesntExist=Mappan:%n%n%1%n%ner ekki til. Vilt þú að mappan sé sköpuð? 154 | 155 | ; *** "Select Components" wizard page 156 | WizardSelectComponents=Velja atriði 157 | SelectComponentsDesc=Hvaða atriði ætti að uppsetja? 158 | SelectComponentsLabel2=Veldu atriðin sem þú vilt uppsetja; hreinsaðu atriðin sem þú vilt ekki uppsetja. Smelltu á Næst þegar þú ert tilbúin(n) til að halda áfram. 159 | FullInstallation=Full uppsetning 160 | CompactInstallation=Samanþjöppuð uppsetning 161 | CustomInstallation=Sérsnídd uppsetning 162 | NoUninstallWarningTitle=Atriði eru til 163 | NoUninstallWarning=Uppsetning hefur greint það að eftirfarandi atriði eru nú þegar uppsett á tölvunni þinni:%n%n%1%n%nAð afvelja þessi atriði mun ekki niðurtaka þau.%n%nVilt þú halda áfram hvort sem er? 164 | ComponentSize1=%1 KB 165 | ComponentSize2=%1 MB 166 | ComponentsDiskSpaceGBLabel=Núverandi val krefst að minnsta kosti [gb] GB af diskplássi. 167 | ComponentsDiskSpaceMBLabel=Núverandi val krefst að minnsta kosti [mb] MB af diskplássi. 168 | 169 | ; *** "Select Additional Tasks" wizard page 170 | WizardSelectTasks=Veldu aukaleg verk 171 | SelectTasksDesc=Hvaða aukalegu verk ættu að vera framkvæmd? 172 | SelectTasksLabel2=Veldu hin aukalegu verk sem þú vilt að Uppsetning framkvæmi meðan [name] er uppsettur, ýttu síðan á Næst. 173 | 174 | ; *** "Select Start Menu Folder" wizard page 175 | WizardSelectProgramGroup=Veldu Upphafsvalmyndarmöppu 176 | SelectStartMenuFolderDesc=Hvert ætti Uppsetning að setja skyndivísa forritsins? 177 | SelectStartMenuFolderLabel3=Uppsetning mun skapa skyndivísa forritsins í hina eftirfarandi Upphafsvalmyndarmöppu. 178 | SelectStartMenuFolderBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. 179 | MustEnterGroupName=Þú verður að innslá möppunafn. 180 | GroupNameTooLong=Möppunafnið eða slóðin er of löng. 181 | InvalidGroupName=Möppunafnið er ekki gilt. 182 | BadGroupName=Möppunafnið getur ekki innihaldið neitt af hinum eftirfarandi rittáknum:%n%n%1 183 | NoProgramGroupCheck2=&Ekki skapa Upphafsvalmyndarmöppu 184 | 185 | ; *** "Ready to Install" wizard page 186 | WizardReady=Tilbúin til að uppsetja 187 | ReadyLabel1=Uppsetning er núna tilbúin til að hefja uppsetningu [name] á tölvuna þína. 188 | ReadyLabel2a=Smelltu á Uppsetja til að halda áfram uppsetningunni eða smelltu á Til baka ef þú vilt endurskoða eða breyta einhverjum stillingum. 189 | ReadyLabel2b=Smelltu á Uppsetja til að halda áfram uppsetningunni. 190 | ReadyMemoUserInfo=Notandaupplýsingar: 191 | ReadyMemoDir=Staðsetning: 192 | ReadyMemoType=Uppsetningartegund: 193 | ReadyMemoComponents=Valin atriði: 194 | ReadyMemoGroup=Upphafsvalmyndarmappa: 195 | ReadyMemoTasks=Aukaleg verk: 196 | 197 | ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile 198 | DownloadingLabel=Niðurhlaðandi aukalegum skrám… 199 | ButtonStopDownload=&Stöðva niðurhleðslu 200 | StopDownload=Ert þú viss um að þú viljir stöðva niðurhleðsluna? 201 | ErrorDownloadAborted=Niðurhleðslu hætt 202 | ErrorDownloadFailed=Niðurhleðsla mistókst: %1 %2 203 | ErrorDownloadSizeFailed=Mistókst að sækja stærð: %1 %2 204 | ErrorFileHash1=Skráarhakk mistókst: %1 205 | ErrorFileHash2=Ógilt skráarhakk: bjóst við %1, fékk %2 206 | ErrorProgress=Ógild framvinda: %1 of %2 207 | ErrorFileSize=Ógild skráarstærð: bjóst við %1, fékk %2 208 | 209 | ; *** "Preparing to Install" wizard page 210 | WizardPreparing=Undirbúandi uppsetningu 211 | PreparingDesc=Uppsetning er undirbúandi uppsetningu [name] á tölvuna þína. 212 | PreviousInstallNotCompleted=Uppsetningu/Fjarlægingu eftirfarandi forrits var ekki lokið. Þú þarft að endurræsa tölvuna þína til að ljúka þeirri uppsetningu.%n%nEftir endurræsingu tölvunnar þinnar, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name]. 213 | CannotContinue=Uppsetning getur ekki haldið áfram. Vinsamlega smelltu á Hætta við til að hætta. 214 | ApplicationsFound=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. 215 | ApplicationsFound2=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. Eftir að uppsetningunni lýkur mun Uppsetning reyna að endurræsa hugbúnaðinn. 216 | CloseApplications=&Sjálfvirkt loka hugbúnaðinum 217 | DontCloseApplications=&Ekki loka hugbúnaðinum 218 | ErrorCloseApplications=Uppsetningu var ófært um að sjálfvirkt loka öllum hugbúnaði. Það er ráðlagt að þú lokir öllum hugbúnaði notandi skrár sem þurfa að vera uppfærðar af Uppsetningu áður en haldið er áfram. 219 | PrepareToInstallNeedsRestart=Þú verður að endurræsa tölvuna þína. Eftir að hafa endurræst tölvuna þína, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name].%n%nVilt þú endurræsa núna? 220 | 221 | ; *** "Installing" wizard page 222 | WizardInstalling=Uppsetjandi 223 | InstallingLabel=Vinsamlega bíddu meðan Uppsetning uppsetur [name] á tölvuna þína. 224 | 225 | ; *** "Setup Completed" wizard page 226 | FinishedHeadingLabel=Ljúkandi [name]-uppsetningaraðstoðaranum 227 | FinishedLabelNoIcons=Uppsetning hefur lokið uppsetningu [name] á tölvuna þína. 228 | FinishedLabel=Uppsetning hefur lokið uppsetningu [name] á þinni tölvu. Hugbúnaðurinn getur verið ræstur með því að velja hina uppsettu skyndivísa. 229 | ClickFinish=Smelltu á Ljúka til að hætta í Uppsetningu. 230 | FinishedRestartLabel=Til að ljúka uppsetningu [name] þarft Uppsetning að endurræsa tölvuna þína. Vilt þú endurræsa núna? 231 | FinishedRestartMessage=Til að ljúka uppsetningu [name] þarf Uppsetning að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? 232 | ShowReadmeCheck=Já, ég vil skoða README-skrána 233 | YesRadio=&Já, endurræsa tölvuna núna 234 | NoRadio=&Nei, ég mun endurræsa tölvuna síðar 235 | RunEntryExec=Keyra %1 236 | RunEntryShellExec=Skoða %1 237 | 238 | ; *** "Setup Needs the Next Disk" stuff 239 | ChangeDiskTitle=Uppsetning þarfnast næsta disks 240 | SelectDiskLabel2=Vinsamlega settu inn disk %1 og smelltu á Í lagi.%n%nEf skrárnar á þessum disk er hægt að finna í annarri möppu en þeirri sem birt er fyrir neðan, innsláðu réttu slóðina og smelltu á Vafra. 241 | PathLabel=&Slóð: 242 | FileNotInDir2=Skrána „%1“ var ekki hægt að staðsetja í „%2“. Vinsamlega settu inn rétta diskinn eða veldu aðra möppu. 243 | SelectDirectoryLabel=Vinsamlega tilgreindu staðsetningu næsta disks. 244 | 245 | ; *** Installation phase messages 246 | SetupAborted=Uppsetningu var ekki lokið.%n%nVinsamlega leiðréttu vandamálið og keyrðu Uppsetningu aftur. 247 | AbortRetryIgnoreSelectAction=Velja aðgerð 248 | AbortRetryIgnoreRetry=&Reyna aftur 249 | AbortRetryIgnoreIgnore=&Hunsa villuna og halda áfram 250 | AbortRetryIgnoreCancel=Hætta við uppsetningu 251 | 252 | ; *** Installation status messages 253 | StatusClosingApplications=Lokandi hugbúnaði… 254 | StatusCreateDirs=Skapandi skráasöfn… 255 | StatusExtractFiles=Útdragandi skrár… 256 | StatusCreateIcons=Skapandi skyndivísa… 257 | StatusCreateIniEntries=Skapandi INI-færslur… 258 | StatusCreateRegistryEntries=Skapandi Windows Registry-færslur… 259 | StatusRegisterFiles=Skrásetjandi skrár… 260 | StatusSavingUninstall=Vistandi niðurtekningarupplýsingar… 261 | StatusRunProgram=Ljúkandi uppsetningu… 262 | StatusRestartingApplications=Endurræsandi hugbúnað… 263 | StatusRollback=Rúllandi aftur breytingum… 264 | 265 | ; *** Misc. errors 266 | ErrorInternal2=Innri villa: %1 267 | ErrorFunctionFailedNoCode=%1 mistókst 268 | ErrorFunctionFailed=%1 mistókst; kóði %2 269 | ErrorFunctionFailedWithMessage=%1 mistókst; kóði %2.%n%3 270 | ErrorExecutingProgram=Ófært um að keyra skrá:%n%1 271 | 272 | ; *** Registry errors 273 | ErrorRegOpenKey=Villa við opnun Windows Registry-lykils:%n%1\%2 274 | ErrorRegCreateKey=Villa við sköpun Windows Registry-lykils:%n%1\%2 275 | ErrorRegWriteKey=Villa við ritun í Windows Registry-lykil:%n%1\%2 276 | 277 | ; *** INI errors 278 | ErrorIniEntry=Villa við sköpun INI-færslu í skrána „%1“. 279 | 280 | ; *** File copying errors 281 | FileAbortRetryIgnoreSkipNotRecommended=&Sleppa þessari skrá (ekki ráðlagt) 282 | FileAbortRetryIgnoreIgnoreNotRecommended=&Hunsa villuna og halda áfram (ekki ráðlagt) 283 | SourceIsCorrupted=Upprunaskráin er spillt 284 | SourceDoesntExist=Upprunaskráin „%1“ er ekki til 285 | ExistingFileReadOnly2=Hina gildandi skrá var ekki hægt að yfirrita því hún er merkt sem lesa-einungis. 286 | ExistingFileReadOnlyRetry=&Fjarlægja lesa-einungis eigindi og reyna aftur 287 | ExistingFileReadOnlyKeepExisting=&Halda gildandi skrá 288 | ErrorReadingExistingDest=Villa kom upp meðan reynt var að lesa gildandi skrána: 289 | FileExistsSelectAction=Velja aðgerð 290 | FileExists2=Skráin er nú þegar til. 291 | FileExistsOverwriteExisting=&Yfirrita hina gildandi skrá 292 | FileExistsKeepExisting=&Halda hinni gildandi skrá 293 | FileExistsOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður 294 | ExistingFileNewerSelectAction=Velja aðgerð 295 | ExistingFileNewer2=Hin gildandi skrá er nýrri en sú sem Uppsetning er að reyna að uppsetja. 296 | ExistingFileNewerOverwriteExisting=&Yfirrita hina gildandi skrá 297 | ExistingFileNewerKeepExisting=&Halda hinni gildandi skrá (ráðlagt) 298 | ExistingFileNewerOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður 299 | ErrorChangingAttr=Villa kom upp meðan reynt var að breyta eigindum gildandi skráarinnar: 300 | ErrorCreatingTemp=Villa kom upp meðan reynt var að skapa skrá í staðsetningarskráasafninu: 301 | ErrorReadingSource=Villa kom upp meðan reynt var að lesa upprunaskrána: 302 | ErrorCopying=Villa kom upp meðan reynt var að afrita skrána: 303 | ErrorReplacingExistingFile=Villa kom upp meðan reynt var að yfirrita gildandi skrána: 304 | ErrorRestartReplace=RestartReplace mistókst: 305 | ErrorRenamingTemp=Villa kom upp meðan reynt var að endurnefna skrá í staðsetningarskráasafninu: 306 | ErrorRegisterServer=Ófært um að skrá DLL/OCX: %1 307 | ErrorRegSvr32Failed=RegSvr32 mistókst með skilakóðann %1 308 | ErrorRegisterTypeLib=Ófært um að skrá tegundasafnið: $1 309 | 310 | ; *** Uninstall display name markings 311 | UninstallDisplayNameMark=%1 (%2) 312 | UninstallDisplayNameMarks=%1 (%2, %3) 313 | UninstallDisplayNameMark32Bit=32-bita 314 | UninstallDisplayNameMark64Bit=64-bita 315 | UninstallDisplayNameMarkAllUsers=Allir notendur 316 | UninstallDisplayNameMarkCurrentUser=Núverandi notandi 317 | 318 | ; *** Post-installation errors 319 | ErrorOpeningReadme=Villa kom upp meðan reynt var að opna README-skrána. 320 | ErrorRestartingComputer=Uppsetningu tókst ekki að endurræsa tölvuna. Vinsamlega gerðu þetta handvirkt. 321 | 322 | ; *** Uninstaller messages 323 | UninstallNotFound=Skráin „%1“ er ekki til. Getur ekki niðurtekið. 324 | UninstallOpenError=Skrána „%1“ var ekki hægt að opna. Getur ekki niðurtekið 325 | UninstallUnsupportedVer=Niðurtökuatburðaskráin „%1“ er á sniði sem er ekki þekkt af þessari útgáfu af niðurtakaranum. Getur ekki niðurtekið 326 | UninstallUnknownEntry=Óþekkt færsla (%1) var fundin í niðurtökuatburðaskránni 327 | ConfirmUninstall=Ert þú viss um að þú viljir algjörlega fjarlægja %1 og öll atriði þess? 328 | UninstallOnlyOnWin64=Þessa uppsetningu er einungis hægt að niðurtaka á 64-bita Windows. 329 | OnlyAdminCanUninstall=Þessi uppsetning getur einungis verið niðurtekin af notanda með stjórnandaréttindi. 330 | UninstallStatusLabel=Vinsamlega bíddu meðan %1 er fjarlægt úr tölvunni þinni. 331 | UninstalledAll=%1 var færsællega fjarlægt af tölvunni þinni. 332 | UninstalledMost=%1-niðurtöku lokið.%n%nSuma liði var ekki hægt að fjarlægja. Þá er hægt að fjarlægja handvirkt. 333 | UninstalledAndNeedsRestart=Til að ljúka niðurtöku %1 þarf að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? 334 | UninstallDataCorrupted=„%1“-skráin er spillt. Getur ekki niðurtekið 335 | 336 | ; *** Uninstallation phase messages 337 | ConfirmDeleteSharedFileTitle=Fjarlægja deilda skrá? 338 | ConfirmDeleteSharedFile2=Kerfið gefur til kynna að hin eftirfarandi deilda skrá er ekki lengur í notkun hjá neinu forriti. Vilt þú að Niðurtakari fjarlægi þessa deildu skrá?%n%nEf einhver forrit eru enn notandi þessa skrá og hún er fjarlægð, kann að vera að þau forrit munu ekki virka almennilega. Ef þú ert óviss, veldu Nei. Að skilja skrána eftir á kerfinu þínu mun ekki valda skaða. 339 | SharedFileNameLabel=Skráarnafn: 340 | SharedFileLocationLabel=Staðsetning: 341 | WizardUninstalling=Niðurtökustaða 342 | StatusUninstalling=Niðurtakandi %1… 343 | 344 | ; *** Shutdown block reasons 345 | ShutdownBlockReasonInstallingApp=Uppsetjandi %1. 346 | ShutdownBlockReasonUninstallingApp=Niðurtakandi %1. 347 | 348 | [CustomMessages] 349 | 350 | NameAndVersion=%1 útgáfa %2 351 | AdditionalIcons=Aukalegir skyndivísir: 352 | CreateDesktopIcon=Skapa &skjáborðsskyndivísi 353 | CreateQuickLaunchIcon=Skapa &Skyndiræsitáknmynd 354 | ProgramOnTheWeb=%1 á Vefnum 355 | UninstallProgram=Niðurtaka %1 356 | LaunchProgram=Ræsa %1 357 | AssocFileExtension=&Tengja %1 við %2-skráarframlenginguna 358 | AssocingFileExtension=&Tengjandi %1 við %2-skráarframlenginguna… 359 | AutoStartProgramGroupDescription=Ræsing: 360 | AutoStartProgram=Sjálfvikt ræsa %1 361 | AddonHostProgramNotFound=%1 gat ekki staðsett möppuna sem þú valdir.%n%nVilt þú halda áfram hvort sem er? -------------------------------------------------------------------------------- /isfiles/Languages/Japanese.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Japanese.isl -------------------------------------------------------------------------------- /isfiles/Languages/Norwegian.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Norwegian.isl -------------------------------------------------------------------------------- /isfiles/Languages/Polish.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Polish.isl -------------------------------------------------------------------------------- /isfiles/Languages/Portuguese.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Portuguese.isl -------------------------------------------------------------------------------- /isfiles/Languages/Russian.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Russian.isl -------------------------------------------------------------------------------- /isfiles/Languages/Slovak.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Slovak.isl -------------------------------------------------------------------------------- /isfiles/Languages/Slovenian.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Slovenian.isl -------------------------------------------------------------------------------- /isfiles/Languages/Spanish.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Spanish.isl -------------------------------------------------------------------------------- /isfiles/Languages/Turkish.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Turkish.isl -------------------------------------------------------------------------------- /isfiles/Languages/Ukrainian.isl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Languages/Ukrainian.isl -------------------------------------------------------------------------------- /isfiles/Setup.e32: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/Setup.e32 -------------------------------------------------------------------------------- /isfiles/SetupLdr.e32: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/SetupLdr.e32 -------------------------------------------------------------------------------- /isfiles/WizModernImage-IS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/WizModernImage-IS.bmp -------------------------------------------------------------------------------- /isfiles/WizModernImage.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/WizModernImage.bmp -------------------------------------------------------------------------------- /isfiles/WizModernSmallImage-IS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/WizModernSmallImage-IS.bmp -------------------------------------------------------------------------------- /isfiles/WizModernSmallImage.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/WizModernSmallImage.bmp -------------------------------------------------------------------------------- /isfiles/isbunzip.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/isbunzip.dll -------------------------------------------------------------------------------- /isfiles/isbzip.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/isbzip.dll -------------------------------------------------------------------------------- /isfiles/isfaq.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://jrsoftware.org/isfaq.php 3 | -------------------------------------------------------------------------------- /isfiles/islzma.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/islzma.dll -------------------------------------------------------------------------------- /isfiles/islzma32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/islzma32.exe -------------------------------------------------------------------------------- /isfiles/islzma64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/islzma64.exe -------------------------------------------------------------------------------- /isfiles/isscint.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/isscint.dll -------------------------------------------------------------------------------- /isfiles/isunzlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/isunzlib.dll -------------------------------------------------------------------------------- /isfiles/iszlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/isfiles/iszlib.dll -------------------------------------------------------------------------------- /isfiles/license.txt: -------------------------------------------------------------------------------- 1 | Inno Setup License 2 | ================== 3 | 4 | Except where otherwise noted, all of the documentation and software included in the Inno Setup 5 | package is copyrighted by Jordan Russell. 6 | 7 | Copyright (C) 1997-2020 Jordan Russell. All rights reserved. 8 | Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved. 9 | 10 | This software is provided "as-is," without any express or implied warranty. In no event shall the 11 | author be held liable for any damages arising from the use of this software. 12 | 13 | Permission is granted to anyone to use this software for any purpose, including commercial 14 | applications, and to alter and redistribute it, provided that the following conditions are met: 15 | 16 | 1. All redistributions of source code files must retain all copyright notices that are currently in 17 | place, and this list of conditions without modification. 18 | 19 | 2. All redistributions in binary form must retain all occurrences of the above copyright notice and 20 | web site addresses that are currently in place (for example, in the About boxes). 21 | 22 | 3. The origin of this software must not be misrepresented; you must not claim that you wrote the 23 | original software. If you use this software to distribute a product, an acknowledgment in the 24 | product documentation would be appreciated but is not required. 25 | 26 | 4. Modified versions in source or binary form must be plainly marked as such, and must not be 27 | misrepresented as being the original software. 28 | 29 | 30 | Jordan Russell 31 | jr-2020 AT jrsoftware.org 32 | https://jrsoftware.org/ -------------------------------------------------------------------------------- /isfiles/whatsnew.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Inno Setup 6 Revision History 5 | 6 | 19 | 20 | 21 | 22 |
Inno Setup 6
Revision History
23 | 24 |

Copyright © 1997-2020 Jordan Russell. All rights reserved.
25 | Portions Copyright © 2000-2020 Martijn Laan. All rights reserved.
26 | For conditions of distribution and use, see LICENSE.TXT. 27 |

28 | 29 |

Want to be notified by e-mail of new Inno Setup releases? Subscribe to the Inno Setup Mailing List!

30 | 31 |

6.1.2 (2020-11-15)

32 |
    33 |
  • Compiler IDE change: Added new Print... (Ctrl+P) menu item to the File menu.
  • 34 |
  • Minor tweaks.
  • 35 |
36 | 37 |

6.1.1-beta (2020-10-29)

38 |

Compiler IDE updates

39 |

Various improvements have been made to the Compiler IDE:

40 | 46 |

Other changes

47 |
    48 |
  • The /PORTABLE=1 command line parameter accepted by Inno Setup's own installers has been improved to allow side-by-side installations. For example, to quickly install a new version to the current user's desktop without affecting already installed versions use the following command line parameters: /portable=1 /silent /currentuser.
  • 49 |
  • Setup's and Uninstall's Back and Next buttons no longer display outdated "<" and ">" markers.
  • 50 |
  • Added new topic to the help file listing the additional Compiler IDE keyboard commands which are not listed in the menus. Added new Keyboard Commands menu item to the Compiler IDE's Help menu to open this topic.
  • 51 |
  • ISPP change: Added new SaveStringToFile support function.
  • 52 |
  • Fix: Calling DLL functions which return a 64-bit integer now gives correct result values.
  • 53 |
  • Minor tweaks.
  • 54 |
55 | 56 |

All official translations have now been updated for the changes in the previous version. Thanks to the maintainers for their time. 57 | 58 |

6.1.0-beta (2020-09-13)

59 |

Per-user fonts

60 |

Per-user fonts are now supported if Setup is running on Windows 10 Version 1803 and later:

61 |
    62 |
  • [Files] section parameter FontInstall can now be used in non administrative installs. Requires Windows 10 Version 1803 or later to successfully install a font.
  • 63 |
  • The {fonts} constant has been renamed to {commonfonts}. The old name is still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't. 64 |
  • Added new {userfonts} constant. Only Windows 10 Version 1803 and later supports {userfonts}. Same directory as {localappdata}\Microsoft\Windows\Fonts.
  • 65 |
  • Added new {autofonts} constant which automatically maps to {commonfonts} unless the installation is running in non administrative install mode, in which case it maps to {userfonts}. It is recommended to update your scripts to use {autofonts} as much as possible to avoid mistakes.
  • 66 |
  • Updated all examples to use {autofonts} instead of {fonts}.
  • 67 |
  • Pascal Scripting change: The UnregisterFont support function now has an extra parameter.
  • 68 |
69 |

Compiler IDE updates

70 |

Various improvements have been made to the Compiler IDE:

71 |
    72 |
  • If the script uses Inno Setup Preprocessor (ISPP) functionality, the Compiler IDE now automatically shows the preprocessor output in a tab so you can check it. This can be turned off in the options.
  • 73 |
  • The Compiler IDE now automatically opens (up to 10) #include files in tabs which allow you to edit and debug these files from within the Compiler IDE. The list of #include files is updated after opening a new main file and after each compilation. This can be turned off in the options. If the option is not turned off, a new Save All menu item is added to the File menu.
  • 74 |
  • If #include files are modified since last compile, the script is now automatically re-compiled before running it. This works even if the option to automatically open #include files is turned off.
  • 75 |
  • Added new Next Tab and Previous Tab menu items to the View menu.
  • 76 |
  • Added new topic to the help file explaining the various integrated debugger menu items in the Run menu which can be used to debug your [Code] section.
  • 77 |
  • Improved highlighting for the [CustomMessages] and [Messages] sections.
  • 78 |
  • Added new MessageBox Designer menu item to the Tools menu to design and insert MsgBox or TaskDialogMsgBox calls for the [Code] section.
  • 79 |
  • Added new Step Out menu item to the Run menu to unpause Setup until it reaches the end of the current function, then pause it on the next line.
  • 80 |
  • Added buttons to the Welcome dialog to Donate to support Inno Setup (Thank you!) and to Subscribe to the Inno Setup Mailing List to be notified by e-mail of new Inno Setup releases.
  • 81 |
  • The Run Parameters dialog now shows a list of most recently used parameters.
  • 82 |
83 |

Built-in download support for [Code]

84 |

Pascal Scripting now supports downloading files and checking SHA-256 hashes:

85 |
    86 |
  • Added new DownloadTemporaryFile support function to download files without using a third-party tool: 87 |
      88 |
    • Supports HTTPS (but not expired or self-signed certificates) and HTTP.
    • 89 |
    • Redirects are automatically followed and proxy settings are automatically used.
    • 90 |
    • Safe to use from services unlike existing third-party tools.
    • 91 |
    • Supports SHA-256 hash checking of the downloaded file.
    • 92 |
    • Supports basic authentication.
    • 93 |
    94 |
  • 95 |
  • Added new CreateDownloadPage support function to easily show the download progress to the user. See the new CodeDownloadFiles.iss example script for an example.
  • 96 |
  • Added new DownloadTemporaryFileSize support function to get the size of a file without downloading it.
  • 97 |
  • Added new GetSHA256OfFile, GetSHA256OfString, and GetSHA256OfUnicodeString support functions to calculate SHA-256 hashes.
  • 98 |
  • Change in default behavior: Setup no longer disables itself entirely while PrepareToInstall is running. Instead only the Cancel button is disabled.
  • 99 |
100 |

Inno Setup Preprocessor (ISPP) updates

101 |

ISPP now uses 64-bit integers and has new functions to more easily compare version numbers:

102 |
    103 |
  • ISPP's int type is now a signed 64-bit integer type. 104 |
  • Support function FileSize now supports 64-bit file sizes.
  • 105 |
  • Added new GetPackedVersion, PackVersionNumbers, PackVersionComponents, ComparePackedVersion, SamePackedVersion, UnpackVersionNumbers, UnpackVersionComponents, and VersionToStr support functions.
  • 106 |
  • Support function GetFileVersion and ParseVersion have been renamed to GetVersionNumbersString and GetVersionComponents respectively. The old names are still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't.
  • 107 |
108 |

Similar Pascal Scripting changes have been done for [Code]:

109 |
    110 |
  • Added new FileSize64 support function.
  • 111 |
  • Added new GetPackedVersion, PackVersionNumbers, PackVersionComponents, ComparePackedVersion, SamePackedVersion, UnpackVersionNumbers, UnpackVersionComponents, GetVersionComponents, and VersionToStr support functions. This makes ISPP and [Code] support the same list of version related functions.
  • 112 |
113 |

Other changes

114 |
    115 |
  • Fix: Inno Setup 6.0.5 no longer supported Windows Vista.
  • 116 |
  • Change in default behavior: [Setup] section directive MinVersion now defaults to 6.1sp1, so by default Setup will not run on Windows Vista or on versions of Windows 7 and Windows Server 2008 R2 which have not been updated. Setting MinVersion to 6.0 to allow Setup to run on Windows Vista is supported but not recommended: Windows Vista doesn't support some of Setup's security measures against potential DLL preloading attacks so these have to be removed by the compiler if MinVersion is below 6.1 making your installer less secure on all versions of Windows.
  • 117 |
  • Inno Setup's version number doesn't display "(u)" at the end anymore since the Unicode version has been the only version for quite some time now.
  • 118 |
  • Added new [Run] and [UninstallRun] sections flag: dontlogparameters. If this flag is specified, the command line parameters for the program will not be included in the log file.
  • 119 |
  • If there are [UninstallRun] section entries without a RunOnceId parameter the compiler will now warn you about this. By assigning a string to RunOnceId, you can ensure that a particular [UninstallRun] entry will only be executed once during uninstallation. The warning can be disabled using new [Setup] section directive MissingRunOnceIdsWarning.
  • 120 |
  • Added new [Icons] section parameter: AppUserModelToastActivatorCLSID. Specifies the Windows 10 Application User Model Toast Activator CLSID for the shortcut. Ignored on earlier Windows versions.
  • 121 |
  • Setup's prompts to overwrite or keep existing files have been made more user friendly: 122 | 126 |
  • 127 |
  • Console-mode compiler (ISCC) change: Warnings and errors are now colorized.
  • 128 |
  • Pascal Scripting changes: 129 |
      130 |
    • Added new CalculateButtonWidth function to the TSetupForm support class.
    • 131 |
    • The ACaption and ADescription parameters of the various Create...Page support functions may now specify Setup messages containing shorthands like [name].
    • 132 |
    • Fix: Support function WizardSelectComponents now also updates component sizes and the current selection's required disk space.
    • 133 |
    134 |
  • 135 |
  • ISPP changes: 136 |
      137 |
    • Using #pragma verboselevel now automatically turns on verbose mode.
    • 138 |
    • Added new Message, Warning, and Error support functions.
    • 139 |
    • ISPP's output is now cleaner and warnings are colorized.
    • 140 |
    141 |
  • Various documentation improvements.
  • 142 |
  • Minor tweaks.
  • 143 |
144 | 145 |

Contributions via GitHub: Thanks to Gavin Lambert and Sergii Leonov for their contributions.

146 | 147 |

Some messages have been added and changed in this version: (View differences in Default.isl).

148 |
    149 |
  • New messages: 150 |
      151 |
    • DownloadingLabel, ButtonStopDownload, StopDownload, ErrorDownloadAborted, ErrorDownloadFailed, ErrorDownloadSizeFailed, ErrorFileHash1, ErrorFileHash2, ErrorProgress, ErrorFileSize.
    • 152 |
    • ExistingFileNewerSelectAction, ExistingFileNewer2, ExistingFileNewerOverwriteExisting, ExistingFileNewerKeepExisting, ExistingFileNewerOverwriteOrKeepAll.
    • 153 |
    • FileExistsSelectAction, FileExists2, FileExistsOverwriteExisting, FileExistsKeepExisting, FileExistsOverwriteOrKeepAll.
    • 154 |
    155 |
  • 156 |
  • Previously optional messages which must now always be set: 157 |
      158 |
    • ComponentsDiskSpaceGBLabel, DiskSpaceGBLabel, PrepareToInstallNeedsRestart.
    • 159 |
    160 |
  • Removed messages: 161 |
      162 |
    • ExistingFileNewer, FileExists.
    • 163 |
    164 |
  • 165 |
166 | 167 |

Note: Not all official translations have been updated for these changes at this moment. 168 | 169 |

Inno Setup 6.0 Revision History

170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /ismail.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/ismail.bmp -------------------------------------------------------------------------------- /isportable.iss: -------------------------------------------------------------------------------- 1 | // -- IsPortable.iss -- 2 | // Include file with support functions for portable mode 3 | // 4 | [Code] 5 | function PortableCheck: Boolean; 6 | begin 7 | Result := ExpandConstant('{param:portable|0}') = '1'; 8 | end; 9 | 10 | function GetAppId(Param: String): String; 11 | begin 12 | Result := Param; 13 | if PortableCheck then 14 | Result := Result + ' Portable'; 15 | end; 16 | 17 | function GetDefaultDirName(Param: String): String; 18 | begin 19 | if PortableCheck then 20 | Result := '{autodesktop}' 21 | else 22 | Result := '{autopf}'; 23 | Result := ExpandConstant(AddBackslash(Result) + Param); 24 | end; 25 | 26 | 27 | procedure IsPortableInitializeWizard; 28 | begin 29 | if PortableCheck then 30 | WizardForm.NoIconsCheck.Checked := True; 31 | end; 32 | 33 | 34 | function IsPortableShouldSkipPage(PageID: Integer): Boolean; 35 | begin 36 | Result := (PageID = wpSelectProgramGroup) and PortableCheck; 37 | end; -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Inno Setup License 2 | ================== 3 | 4 | Except where otherwise noted, all of the documentation and software included in the Inno Setup 5 | package is copyrighted by Jordan Russell. 6 | 7 | Copyright (C) 1997-2020 Jordan Russell. All rights reserved. 8 | Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved. 9 | 10 | This software is provided "as-is," without any express or implied warranty. In no event shall the 11 | author be held liable for any damages arising from the use of this software. 12 | 13 | Permission is granted to anyone to use this software for any purpose, including commercial 14 | applications, and to alter and redistribute it, provided that the following conditions are met: 15 | 16 | 1. All redistributions of source code files must retain all copyright notices that are currently in 17 | place, and this list of conditions without modification. 18 | 19 | 2. All redistributions in binary form must retain all occurrences of the above copyright notice and 20 | web site addresses that are currently in place (for example, in the About boxes). 21 | 22 | 3. The origin of this software must not be misrepresented; you must not claim that you wrote the 23 | original software. If you use this software to distribute a product, an acknowledgment in the 24 | product documentation would be appreciated but is not required. 25 | 26 | 4. Modified versions in source or binary form must be plainly marked as such, and must not be 27 | misrepresented as being the original software. 28 | 29 | 30 | Jordan Russell 31 | jr-2020 AT jrsoftware.org 32 | https://jrsoftware.org/ -------------------------------------------------------------------------------- /otherfiles/IDE.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/otherfiles/IDE.ico -------------------------------------------------------------------------------- /otherfiles/Iscrypt.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/otherfiles/Iscrypt.ico -------------------------------------------------------------------------------- /setup.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrsoftware/ispack/28bcf0c742ef0063a7efb7e51d61213d8fdda0c5/setup.ico -------------------------------------------------------------------------------- /setup.iss: -------------------------------------------------------------------------------- 1 | ; -- Setup.iss -- 2 | ; Inno Setup QuickStart Pack's own Setup script 3 | 4 | ; Inno Setup 5 | ; Copyright (C) 1997-2020 Jordan Russell. All rights reserved. 6 | ; Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved. 7 | ; For conditions of distribution and use, see LICENSE.TXT. 8 | 9 | #include "isdonateandmail.iss" 10 | 11 | #include "isportable.iss" 12 | 13 | [Setup] 14 | AppName=Inno Setup QuickStart Pack 15 | AppId={code:GetAppId|Inno Setup 6} 16 | AppVersion=6.1.2 17 | AppPublisher=jrsoftware.org 18 | AppPublisherURL=https://www.innosetup.com/ 19 | AppSupportURL=https://www.innosetup.com/ 20 | AppUpdatesURL=https://www.innosetup.com/ 21 | VersionInfoCopyright=Copyright (C) 1997-2020 Jordan Russell. Portions Copyright (C) 2000-2020 Martijn Laan. 22 | AppMutex=InnoSetupCompilerAppMutex,Global\InnoSetupCompilerAppMutex 23 | SetupMutex=InnoSetupCompilerSetupMutex,Global\InnoSetupCompilerSetupMutex 24 | WizardStyle=modern 25 | DefaultDirName={code:GetDefaultDirName|Inno Setup 6} 26 | DefaultGroupName=Inno Setup 6 27 | PrivilegesRequiredOverridesAllowed=commandline 28 | AllowNoIcons=yes 29 | Compression=lzma2/ultra 30 | InternalCompressLevel=ultra 31 | SolidCompression=yes 32 | Uninstallable=not PortableCheck 33 | UninstallDisplayIcon={app}\Compil32.exe 34 | UsePreviousLanguage=no 35 | LicenseFile=isfiles\license.txt 36 | AppModifyPath="{app}\Ispack-setup.exe" /modify=1 37 | WizardImageFile=compiler:WizModernImage-IS.bmp 38 | WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp 39 | SetupIconFile=Setup.ico 40 | #ifdef SIGNTOOL 41 | SignTool=ispacksigntool 42 | SignTool=ispacksigntool256 43 | SignedUninstaller=yes 44 | #endif 45 | 46 | [Tasks] 47 | Name: desktopicon; Description: "{cm:CreateDesktopIcon}"; Check: not PortableCheck 48 | ;Name: fileassoc; Description: "{cm:AssocFileExtension,Inno Setup,.iss}" 49 | 50 | [InstallDelete] 51 | ; Remove old ISPP files 52 | Type: files; Name: {app}\ISCmplr.dls 53 | Type: files; Name: {app}\Builtins.iss 54 | ; Remove optional ISCrypt files 55 | Type: files; Name: {app}\ISCrypt.dll 56 | ; Remove desktop icon if needed 57 | Type: files; Name: {autodesktop}\Inno Setup Compiler.lnk; Tasks: not desktopicon; Check: not PortableCheck 58 | ; Remove old FAQ file 59 | Type: files; Name: "{app}\isfaq.htm" 60 | ; Remove old .islu files 61 | Type: files; Name: "{app}\Languages\*.islu" 62 | ; Remove translations in case any got demoted 63 | Type: files; Name: "{app}\Languages\*.isl" 64 | ; Remove old example files 65 | Type: files; Name: "{app}\Examples\Donate.iss" 66 | Type: files; Name: "{app}\Examples\Donate.bmp" 67 | 68 | [Files] 69 | ; First the files used by [Code] so these can be quickly decompressed despite solid compression 70 | Source: "otherfiles\IDE.ico"; Flags: dontcopy 71 | Source: "otherfiles\ISCrypt.ico"; Flags: dontcopy 72 | ; Other files 73 | Source: "isfiles\*"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion 74 | Source: "isfiles\Examples\*"; DestDir: "{app}\Examples"; Flags: recursesubdirs ignoreversion 75 | Source: "Setup.iss"; DestDir: "{app}\Examples"; Flags: ignoreversion 76 | Source: "Setup.ico"; DestDir: "{app}\Examples"; Flags: ignoreversion 77 | Source: "IsDonateAndMail.iss"; DestDir: "{app}\Examples"; Flags: ignoreversion 78 | Source: "IsDonate.bmp"; DestDir: "{app}\Examples"; Flags: ignoreversion 79 | Source: "IsMail.bmp"; DestDir: "{app}\Examples"; Flags: ignoreversion 80 | Source: "IsPortable.iss"; DestDir: "{app}\Examples"; Flags: ignoreversion 81 | ; External files 82 | Source: "{tmp}\ISCrypt.dll"; DestDir: "{app}"; Flags: external ignoreversion; Check: ISCryptCheck 83 | Source: "{srcexe}"; DestDir: "{app}"; DestName: "Ispack-setup.exe"; Flags: external ignoreversion; Check: not ModifyingCheck 84 | 85 | [UninstallDelete] 86 | Type: files; Name: "{app}\isfaq.url" 87 | Type: files; Name: "{app}\Examples\Output\setup.exe" 88 | Type: files; Name: "{app}\Examples\Output\setup-*.bin" 89 | Type: dirifempty; Name: "{app}\Examples\Output" 90 | Type: dirifempty; Name: "{app}\Examples\MyDll\Delphi" 91 | Type: dirifempty; Name: "{app}\Examples\MyDll\C#" 92 | Type: dirifempty; Name: "{app}\Examples\MyDll\C" 93 | Type: dirifempty; Name: "{app}\Examples\MyDll" 94 | Type: dirifempty; Name: "{app}\Examples" 95 | 96 | [INI] 97 | Filename: "{app}\isfaq.url"; Section: "InternetShortcut"; Key: "URL"; String: "https://jrsoftware.org/isfaq.php" 98 | 99 | [Icons] 100 | ; All these will be automatically skipped on portable mode, either because of NoIconsCheck being checked, or because of the desktopicon task being removed 101 | Name: "{group}\Inno Setup Compiler"; Filename: "{app}\Compil32.exe"; WorkingDir: "{app}"; AppUserModelID: "JR.InnoSetup.IDE.6" 102 | Name: "{group}\Inno Setup Documentation"; Filename: "{app}\ISetup.chm"; 103 | Name: "{group}\Inno Setup Example Scripts"; Filename: "{app}\Examples\"; 104 | Name: "{group}\Inno Setup Preprocessor Documentation"; Filename: "{app}\ISPP.chm"; 105 | Name: "{group}\Inno Setup FAQ"; Filename: "{app}\isfaq.url"; 106 | Name: "{group}\Inno Setup Revision History"; Filename: "{app}\whatsnew.htm"; 107 | Name: "{autodesktop}\Inno Setup Compiler"; Filename: "{app}\Compil32.exe"; WorkingDir: "{app}"; AppUserModelID: "JR.InnoSetup.IDE.6"; Tasks: desktopicon; Check: not AnyIDECheck 108 | 109 | [Run] 110 | Filename: "{tmp}\innoide-setup.exe"; StatusMsg: "Installing InnoIDE..."; Parameters: "/verysilent /group=""{groupname}\InnoIDE"" /mergetasks=""desktopicon,file_association"""; Flags: skipifdoesntexist; Check: InnoIDECheck; Tasks: desktopicon 111 | Filename: "{tmp}\innoide-setup.exe"; StatusMsg: "Installing InnoIDE..."; Parameters: "/verysilent /group=""{groupname}\InnoIDE"" /mergetasks=""!desktopicon,file_association"""; Flags: skipifdoesntexist; Check: InnoIDECheck; Tasks: not desktopicon 112 | Filename: "{tmp}\isstudio-setup.exe"; StatusMsg: "Installing Inno Script Studio..."; Parameters: {code:GetISStudioCmdLine}; Flags: skipifdoesntexist; Check: ISStudioCheck 113 | Filename: "{app}\Compil32.exe"; Parameters: "/ASSOC"; StatusMsg: "{cm:AssocingFileExtension,Inno Setup,.iss}"; Check: not PortableCheck and not AnyIDECheck 114 | Filename: "{app}\Compil32.exe"; WorkingDir: "{app}"; Description: "{cm:LaunchProgram,Inno Setup}"; Flags: nowait postinstall skipifsilent; Check: not AnyIDECheck and not ModifyingCheck 115 | Filename: "{code:GetInnoIDEPath}\InnoIDE.exe"; WorkingDir: "{code:GetInnoIDEPath}"; Description: "{cm:LaunchProgram,InnoIDE}"; Flags: nowait postinstall skipifsilent skipifdoesntexist; Check: InnoIDECheck and not ModifyingCheck 116 | Filename: "{code:GetISStudioPath}\ISStudio.exe"; WorkingDir: "{code:GetISStudioPath}"; Description: "{cm:LaunchProgram,Inno Script Studio}"; Flags: nowait postinstall skipifsilent skipifdoesntexist; Check: ISStudioCheck and not ModifyingCheck 117 | 118 | [UninstallRun] 119 | ; The /UNASSOC line will be automatically skipped on portable mode, because of Uninstallable begin set to no 120 | Filename: "{app}\Compil32.exe"; Parameters: "/UNASSOC"; RunOnceId: "RemoveISSAssoc" 121 | 122 | [Code] 123 | var 124 | Modifying, AllowInnoIDE: Boolean; 125 | 126 | IDEPage, ISCryptPage: TWizardPage; 127 | InnoIDECheckBox, ISStudioCheckBox, ISCryptCheckBox: TCheckBox; 128 | IDEOrg: Boolean; 129 | 130 | DownloadPage: TDownloadWizardPage; 131 | FilesDownloaded: Boolean; 132 | 133 | InnoIDEPath, ISStudioPath: String; 134 | InnoIDEPathRead, ISStudioPathRead: Boolean; 135 | 136 | function GetModuleHandle(lpModuleName: LongInt): LongInt; 137 | external 'GetModuleHandleA@kernel32.dll stdcall'; 138 | function ExtractIcon(hInst: LongInt; lpszExeFileName: String; nIconIndex: LongInt): LongInt; 139 | external 'ExtractIconW@shell32.dll stdcall'; 140 | function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt; 141 | external 'DrawIconEx@user32.dll stdcall'; 142 | function DestroyIcon(hIcon: LongInt): LongInt; 143 | external 'DestroyIcon@user32.dll stdcall'; 144 | 145 | const 146 | DI_NORMAL = 3; 147 | 148 | procedure SetInnoIDECheckBoxChecked(Checked: Boolean); 149 | begin 150 | if InnoIDECheckBox <> nil then 151 | InnoIDECheckBox.Checked := Checked; 152 | end; 153 | 154 | function GetInnoIDECheckBoxChecked: Boolean; 155 | begin 156 | if InnoIDECheckBox <> nil then 157 | Result := InnoIDECheckBox.Checked 158 | else 159 | Result := False; 160 | end; 161 | 162 | function InitializeSetup(): Boolean; 163 | begin 164 | Modifying := ExpandConstant('{param:modify|0}') = '1'; 165 | AllowInnoIDE := ExpandConstant('{param:allowinnoide|0}') = '1'; 166 | FilesDownloaded := False; 167 | InnoIDEPathRead := False; 168 | ISStudioPathRead := False; 169 | 170 | Result := True; 171 | end; 172 | 173 | procedure CreateCustomOption(Page: TWizardPage; ACheckCaption: String; var CheckBox: TCheckBox; PreviousControl: TControl); 174 | begin 175 | CheckBox := TCheckBox.Create(Page); 176 | with CheckBox do begin 177 | Top := PreviousControl.Top + PreviousControl.Height + ScaleY(12); 178 | Width := Page.SurfaceWidth; 179 | Height := ScaleY(Height); 180 | Anchors := [akLeft, akTop, akRight]; 181 | Caption := ACheckCaption; 182 | Parent := Page.Surface; 183 | end; 184 | end; 185 | 186 | function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconFileName, ALabel1Caption, ALabel2Caption, 187 | ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage; 188 | var 189 | Page: TWizardPage; 190 | Rect: TRect; 191 | hIcon: LongInt; 192 | Label1, Label2: TNewStaticText; 193 | begin 194 | Page := CreateCustomPage(AAfterID, ACaption, ASubCaption); 195 | 196 | try 197 | AIconFileName := ExpandConstant('{tmp}\' + AIconFileName); 198 | if not FileExists(AIconFileName) then 199 | ExtractTemporaryFile(ExtractFileName(AIconFileName)); 200 | 201 | Rect.Left := 0; 202 | Rect.Top := 0; 203 | Rect.Right := 32; 204 | Rect.Bottom := 32; 205 | 206 | hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 0); 207 | try 208 | with TBitmapImage.Create(Page) do begin 209 | with Bitmap do begin 210 | Width := 32; 211 | Height := 32; 212 | Canvas.Brush.Color := Page.SurfaceColor; 213 | Canvas.FillRect(Rect); 214 | DrawIconEx(Canvas.Handle, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL); 215 | end; 216 | Width := Bitmap.Width; 217 | Height := Bitmap.Width; 218 | Parent := Page.Surface; 219 | end; 220 | finally 221 | DestroyIcon(hIcon); 222 | end; 223 | except 224 | end; 225 | 226 | Label1 := TNewStaticText.Create(Page); 227 | with Label1 do begin 228 | AutoSize := False; 229 | Left := WizardForm.SelectDirLabel.Left; 230 | Width := Page.SurfaceWidth - Left; 231 | Anchors := [akLeft, akTop, akRight]; 232 | WordWrap := True; 233 | Caption := ALabel1Caption; 234 | Parent := Page.Surface; 235 | end; 236 | WizardForm.AdjustLabelHeight(Label1); 237 | 238 | Label2 := TNewStaticText.Create(Page); 239 | with Label2 do begin 240 | Top := Label1.Top + Label1.Height + ScaleY(12); 241 | Width := Page.SurfaceWidth; 242 | Anchors := [akLeft, akTop, akRight]; 243 | WordWrap := True; 244 | Caption := ALabel2Caption; 245 | Parent := Page.Surface; 246 | end; 247 | WizardForm.AdjustLabelHeight(Label2); 248 | 249 | CreateCustomOption(Page, ACheckCaption, CheckBox, Label2); 250 | 251 | Result := Page; 252 | end; 253 | 254 | procedure URLLabelOnClick(Sender: TObject); 255 | var 256 | ErrorCode: Integer; 257 | begin 258 | ShellExecAsOriginalUser('open', TNewStaticText(Sender).Caption, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 259 | end; 260 | 261 | function CreateURLLabel(Page: TWizardPage; PreviousControl: TControl; Offset: Integer; Url: String): Integer; 262 | var 263 | URLLabel: TNewStaticText; 264 | begin 265 | URLLabel := TNewStaticText.Create(Page); 266 | with URLLabel do begin 267 | Top := PreviousControl.Top + PreviousControl.Height + ScaleY(12); 268 | Left := Offset; 269 | Caption := Url; 270 | Cursor := crHand; 271 | OnClick := @UrlLabelOnClick; 272 | Parent := Page.Surface; 273 | { Alter Font *after* setting Parent so the correct defaults are inherited first } 274 | URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]; 275 | URLLabel.Font.Color := clBlue; 276 | end; 277 | WizardForm.AdjustLabelHeight(URLLabel); 278 | Result := URLLabel.Width; 279 | end; 280 | 281 | function GetIDECheckCaption(const Caption: String): String; 282 | begin 283 | Result := Caption; 284 | if PortableCheck then 285 | Result := Result + ' (Not portable!)'; 286 | end; 287 | 288 | procedure CreateCustomPages; 289 | var 290 | Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption: String; 291 | UrlSize: Integer; 292 | begin 293 | if AllowInnoIDE then begin 294 | Caption := 'InnoIDE and Inno Script Studio'; 295 | SubCaption1 := 'Would you like to download and install InnoIDE or Inno Script Studio?'; 296 | IconFileName := 'IDE.ico'; 297 | Label1Caption := 298 | 'InnoIDE and Inno Script Studio are easy to use Inno Setup Script editors meant as a replacement of the standard Compiler IDE that comes with Inno Setup.' + 299 | ' InnoIDE is by Graham Murt, see http://www.innoide.org/ for more information.' + 300 | ' Inno Script Studio is by Kymoto Solutions, see https://www.kymoto.org/inno-script-studio for more information.' + #13#10#13#10 + 301 | 'Using InnoIDE or Inno Script Studio is especially recommended for new users.'; 302 | Label2Caption := 'Select whether you would like to download and install InnoIDE or Inno Script Studio, then click Next.'; 303 | CheckCaption := GetIDECheckCaption('&Download and install InnoIDE'); 304 | 305 | IDEPage := CreateCustomOptionPage(wpSelectProgramGroup, Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption, InnoIDECheckBox); 306 | 307 | CheckCaption := GetIDECheckCaption('D&ownload and install Inno Script Studio'); 308 | CreateCustomOption(IDEPage, CheckCaption, ISStudioCheckBox, InnoIDECheckBox); 309 | 310 | UrlSize := CreateUrlLabel(IDEPage, ISStudioCheckBox, 0, 'http://www.innoide.org/'); 311 | CreateUrlLabel(IDEPage, ISStudioCheckBox, UrlSize + ScaleX(12), 'https://www.kymoto.org/inno-script-studio'); 312 | end else begin 313 | Caption := 'Inno Script Studio'; 314 | SubCaption1 := 'Would you like to download and install Inno Script Studio?'; 315 | IconFileName := 'IDE.ico'; 316 | Label1Caption := 317 | 'Inno Script Studio is an easy to use Inno Setup Script editor meant as a replacement of the standard Compiler IDE that comes with Inno Setup.' + 318 | ' Inno Script Studio is by Kymoto Solutions, see https://www.kymoto.org/inno-script-studio for more information.' + #13#10#13#10 + 319 | 'Using Inno Script Studio is especially recommended for new users.'; 320 | Label2Caption := 'Select whether you would like to download and install Inno Script Studio, then click Next.'; 321 | CheckCaption := GetIDECheckCaption('&Download and install Inno Script Studio'); 322 | 323 | IDEPage := CreateCustomOptionPage(wpSelectProgramGroup, Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption, ISStudioCheckBox); 324 | 325 | CreateUrlLabel(IDEPage, ISStudioCheckBox, 0, 'https://www.kymoto.org/inno-script-studio'); 326 | 327 | InnoIDECheckBox := nil; 328 | end; 329 | 330 | Caption := 'Encryption Support'; 331 | SubCaption1 := 'Would you like to download encryption support?'; 332 | IconFileName := 'ISCrypt.ico'; 333 | Label1Caption := 334 | 'Inno Setup supports encryption. However, because of encryption import/export laws in some countries, encryption support is not included in the main' + 335 | ' Inno Setup installer. Instead, it can be downloaded from a server located in the Netherlands now.'; 336 | Label2Caption := 'Select whether you would like to download and install encryption support, then click Next.'; 337 | CheckCaption := '&Download and install encryption support'; 338 | 339 | ISCryptPage := CreateCustomOptionPage(IDEPage.ID, Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption, ISCryptCheckBox); 340 | 341 | DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil); 342 | end; 343 | 344 | procedure InitializeWizard; 345 | var 346 | ISStudioDefault: String; 347 | begin 348 | CreateCustomPages; 349 | 350 | if PortableCheck then 351 | ISStudioDefault := '0' 352 | else 353 | ISStudioDefault := '1'; 354 | 355 | SetInnoIDECheckBoxChecked(GetPreviousData('IDE' {don't change}, '0') = '1'); 356 | ISStudioCheckBox.Checked := GetPreviousData('ISStudio', ISStudioDefault) = '1'; 357 | ISCryptCheckBox.Checked := GetPreviousData('ISCrypt', '1') = '1'; 358 | 359 | IDEOrg := GetInnoIDECheckBoxChecked or ISStudioCheckBox.Checked; 360 | end; 361 | 362 | procedure RegisterPreviousData(PreviousDataKey: Integer); 363 | begin 364 | SetPreviousData(PreviousDataKey, 'IDE' {don't change}, IntToStr(Ord(GetInnoIDECheckBoxChecked))); 365 | SetPreviousData(PreviousDataKey, 'ISStudio', IntToStr(Ord(ISStudioCheckBox.Checked))); 366 | SetPreviousData(PreviousDataKey, 'ISCrypt', IntToStr(Ord(ISCryptCheckBox.Checked))); 367 | end; 368 | 369 | 370 | procedure DownloadFiles(InnoIDE, ISStudio, ISCrypt: Boolean); 371 | begin 372 | DownloadPage.Clear; 373 | if InnoIDE then 374 | DownloadPage.Add('https://jrsoftware.org/download.php/innoide.exe', 'innoide-setup.exe', ''); 375 | if ISStudio then 376 | DownloadPage.Add('https://jrsoftware.org/download.php/isstudio.exe', 'isstudio-setup.exe', ''); 377 | if ISCrypt then 378 | DownloadPage.Add('https://jrsoftware.org/download.php/iscrypt.dll', 'ISCrypt.dll', '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc'); 379 | DownloadPage.Show; 380 | try 381 | try 382 | DownloadPage.Download; 383 | FilesDownloaded := True; 384 | except 385 | Log(GetExceptionMessage); 386 | FilesDownloaded := False; 387 | end; 388 | finally 389 | DownloadPage.Hide; 390 | end; 391 | 392 | if not FilesDownloaded then 393 | SuppressibleMsgBox('Setup could not download the extra files. Try again later or download and install the extra files manually.' + #13#13 + 'Setup will now continue installing normally.', mbError, mb_Ok, idOk); 394 | end; 395 | 396 | function NextButtonClick(CurPageID: Integer): Boolean; 397 | begin 398 | if CurPageID = wpReady then 399 | if GetInnoIDECheckBoxChecked or ISStudioCheckBox.Checked or ISCryptCheckBox.Checked then 400 | DownloadFiles(GetInnoIDECheckBoxChecked, ISStudioCheckBox.Checked, ISCryptCheckBox.Checked); 401 | Result := True; 402 | end; 403 | 404 | function ShouldSkipPage(PageID: Integer): Boolean; 405 | begin 406 | Result := Modifying and ((PageID = wpSelectDir) or (PageID = wpSelectProgramGroup) or ((PageID = IDEPage.ID) and IDEOrg)); 407 | end; 408 | 409 | function ModifyingCheck: Boolean; 410 | begin 411 | Result := Modifying; 412 | end; 413 | 414 | function InnoIDECheck: Boolean; 415 | begin 416 | Result := GetInnoIDECheckBoxChecked and FilesDownloaded; 417 | end; 418 | 419 | function ISStudioCheck: Boolean; 420 | begin 421 | Result := ISStudioCheckBox.Checked and FilesDownloaded; 422 | end; 423 | 424 | function AnyIDECheck: Boolean; 425 | begin 426 | Result := InnoIDECheck or ISStudioCheck; 427 | end; 428 | 429 | function ISCryptCheck: Boolean; 430 | begin 431 | Result := ISCryptCheckBox.Checked and FilesDownloaded; 432 | end; 433 | 434 | function GetIDEPath(Key, Name: String; var IDEPath: String; var IDEPathRead: Boolean): String; 435 | var 436 | IDEPathKeyName, IDEPathValueName: String; 437 | begin 438 | if not IDEPathRead then begin 439 | IDEPathKeyName := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + Key; 440 | IDEPathValueName := 'Inno Setup: App Path'; 441 | 442 | if not RegQueryStringValue(HKLM, IDEPathKeyName, IDEPathValueName, IDEPath) then begin 443 | if not RegQueryStringValue(HKCU, IDEPathKeyName, IDEPathValueName, IDEPath) then begin 444 | SuppressibleMsgBox('Error launching InnoIDE:'#13'Could not read InnoIDE path from registry.', mbError, mb_Ok, idOk); 445 | IDEPath := ''; 446 | end; 447 | end; 448 | 449 | IDEPathRead := True; 450 | end; 451 | 452 | Result := IDEPath; 453 | end; 454 | 455 | function GetInnoIDEPath(S: String): String; 456 | begin 457 | Result := GetIDEPath('{1E8BAA74-62A9-421D-A61F-164C7C3943E9}_is1', 'InnoIDE', InnoIDEPath, InnoIDEPathRead); 458 | end; 459 | 460 | function GetISStudioPath(S: String): String; 461 | begin 462 | Result := GetIDEPath('{7C22BD69-9939-43CE-B16E-437DB2A39492}_is1', 'Inno Script Studio', ISStudioPath, ISStudioPathRead); 463 | end; 464 | 465 | function GetISStudioCmdLine(S: String): String; 466 | begin 467 | Result := '/verysilent /group="' + ExpandConstant('{groupname}') + '\Inno Script Studio" /mergetasks="'; 468 | if not WizardIsTaskSelected('desktopicon') then 469 | Result := Result + '!'; 470 | Result := Result + 'desktopicon,issfileassociation"'; 471 | if PortableCheck then 472 | Result := Result + ' /portable=1'; 473 | end; --------------------------------------------------------------------------------