Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added files.

  • Loading branch information...
commit 7fb502173cb98bae80153d7c43f4b3d850033a4f 0 parents
@martijnlaan martijnlaan authored
Showing with 19,799 additions and 0 deletions.
  1. BIN  isfiles-unicode/Compil32.exe
  2. +317 −0 isfiles-unicode/Default.isl
  3. +48 −0 isfiles-unicode/Examples/64BitThreeArch.iss
  4. +34 −0 isfiles-unicode/Examples/64BitTwoArch.iss
  5. +32 −0 isfiles-unicode/Examples/64bit.iss
  6. +310 −0 isfiles-unicode/Examples/CodeAutomation.iss
  7. +298 −0 isfiles-unicode/Examples/CodeAutomation2.iss
  8. +361 −0 isfiles-unicode/Examples/CodeClasses.iss
  9. +149 −0 isfiles-unicode/Examples/CodeExample1.iss
  10. +117 −0 isfiles-unicode/Examples/CodePrepareToInstall.iss
  11. +204 −0 isfiles-unicode/Examples/Codedlg.iss
  12. +72 −0 isfiles-unicode/Examples/Codedll.iss
  13. +33 −0 isfiles-unicode/Examples/Components.iss
  14. +22 −0 isfiles-unicode/Examples/Example1.iss
  15. +24 −0 isfiles-unicode/Examples/Example2.iss
  16. +35 −0 isfiles-unicode/Examples/Example3.iss
  17. +44 −0 isfiles-unicode/Examples/ISPPExample1.iss
  18. +4 −0 isfiles-unicode/Examples/ISPPExample1License.txt
  19. +59 −0 isfiles-unicode/Examples/Languages.iss
  20. +6 −0 isfiles-unicode/Examples/MyDll/C/Mydll.c
  21. +2 −0  isfiles-unicode/Examples/MyDll/C/Mydll.def
  22. +76 −0 isfiles-unicode/Examples/MyDll/C/Mydll.dsp
  23. +14 −0 isfiles-unicode/Examples/MyDll/Delphi/Mydll.dpr
  24. BIN  isfiles-unicode/Examples/MyProg-IA64.exe
  25. BIN  isfiles-unicode/Examples/MyProg-x64.exe
  26. BIN  isfiles-unicode/Examples/Mydll.dll
  27. BIN  isfiles-unicode/Examples/Myprog.chm
  28. BIN  isfiles-unicode/Examples/Myprog.exe
  29. +1 −0  isfiles-unicode/Examples/Readme-Dutch.txt
  30. +1 −0  isfiles-unicode/Examples/Readme-German.txt
  31. +1 −0  isfiles-unicode/Examples/Readme.txt
  32. +45 −0 isfiles-unicode/Examples/UninstallCodeExample1.iss
  33. BIN  isfiles-unicode/ISCC.exe
  34. BIN  isfiles-unicode/ISPP.chm
  35. BIN  isfiles-unicode/ISPP.dll
  36. +345 −0 isfiles-unicode/ISPPBuiltins.iss
  37. BIN  isfiles-unicode/Iscmplr.dll
  38. BIN  isfiles-unicode/Isetup.chm
  39. BIN  isfiles-unicode/Isppcc.exe
  40. +318 −0 isfiles-unicode/Languages/Basque.isl
  41. +341 −0 isfiles-unicode/Languages/BrazilianPortuguese.isl
  42. +302 −0 isfiles-unicode/Languages/Catalan.isl
  43. +318 −0 isfiles-unicode/Languages/Czech.isl
  44. +315 −0 isfiles-unicode/Languages/Danish.isl
  45. +297 −0 isfiles-unicode/Languages/Dutch.isl
  46. +296 −0 isfiles-unicode/Languages/Finnish.isl
  47. +322 −0 isfiles-unicode/Languages/French.isl
  48. +306 −0 isfiles-unicode/Languages/German.isl
  49. +314 −0 isfiles-unicode/Languages/Hebrew.isl
  50. +339 −0 isfiles-unicode/Languages/Hungarian.isl
  51. +323 −0 isfiles-unicode/Languages/Italian.isl
  52. +303 −0 isfiles-unicode/Languages/Japanese.isl
  53. +312 −0 isfiles-unicode/Languages/Norwegian.isl
  54. +309 −0 isfiles-unicode/Languages/Polish.isl
  55. +301 −0 isfiles-unicode/Languages/Portuguese.isl
  56. +307 −0 isfiles-unicode/Languages/Russian.isl
  57. +244 −0 isfiles-unicode/Languages/Slovak.isl
  58. +307 −0 isfiles-unicode/Languages/Slovenian.isl
  59. +316 −0 isfiles-unicode/Languages/Spanish.isl
  60. BIN  isfiles-unicode/Setup.e32
  61. BIN  isfiles-unicode/Setupldr.e32
  62. BIN  isfiles-unicode/WizModernImage-IS.bmp
  63. BIN  isfiles-unicode/WizModernImage.bmp
  64. BIN  isfiles-unicode/WizModernSmallImage-IS.bmp
  65. BIN  isfiles-unicode/WizModernSmallImage.bmp
  66. BIN  isfiles-unicode/isbunzip.dll
  67. BIN  isfiles-unicode/isbzip.dll
  68. +495 −0 isfiles-unicode/isfaq.htm
  69. BIN  isfiles-unicode/islzma.dll
  70. BIN  isfiles-unicode/islzma32.exe
  71. BIN  isfiles-unicode/islzma64.exe
  72. BIN  isfiles-unicode/isscint.dll
  73. BIN  isfiles-unicode/isunzlib.dll
  74. BIN  isfiles-unicode/iszlib.dll
  75. +37 −0 isfiles-unicode/license.txt
  76. +1,047 −0 isfiles-unicode/whatsnew.htm
  77. BIN  isfiles/Compil32.exe
  78. +317 −0 isfiles/Default.isl
  79. +48 −0 isfiles/Examples/64BitThreeArch.iss
  80. +34 −0 isfiles/Examples/64BitTwoArch.iss
  81. +32 −0 isfiles/Examples/64bit.iss
  82. +310 −0 isfiles/Examples/CodeAutomation.iss
  83. +298 −0 isfiles/Examples/CodeAutomation2.iss
  84. +361 −0 isfiles/Examples/CodeClasses.iss
  85. +149 −0 isfiles/Examples/CodeExample1.iss
  86. +117 −0 isfiles/Examples/CodePrepareToInstall.iss
  87. +204 −0 isfiles/Examples/Codedlg.iss
  88. +72 −0 isfiles/Examples/Codedll.iss
  89. +33 −0 isfiles/Examples/Components.iss
  90. +22 −0 isfiles/Examples/Example1.iss
  91. +24 −0 isfiles/Examples/Example2.iss
  92. +35 −0 isfiles/Examples/Example3.iss
  93. +44 −0 isfiles/Examples/ISPPExample1.iss
  94. +4 −0 isfiles/Examples/ISPPExample1License.txt
  95. +59 −0 isfiles/Examples/Languages.iss
  96. +6 −0 isfiles/Examples/MyDll/C/Mydll.c
  97. +2 −0  isfiles/Examples/MyDll/C/Mydll.def
  98. +76 −0 isfiles/Examples/MyDll/C/Mydll.dsp
  99. +14 −0 isfiles/Examples/MyDll/Delphi/Mydll.dpr
  100. BIN  isfiles/Examples/MyProg-IA64.exe
  101. BIN  isfiles/Examples/MyProg-x64.exe
  102. BIN  isfiles/Examples/Mydll.dll
  103. BIN  isfiles/Examples/Myprog.chm
  104. BIN  isfiles/Examples/Myprog.exe
  105. +1 −0  isfiles/Examples/Readme-Dutch.txt
  106. +1 −0  isfiles/Examples/Readme-German.txt
  107. +1 −0  isfiles/Examples/Readme.txt
  108. +45 −0 isfiles/Examples/UninstallCodeExample1.iss
  109. BIN  isfiles/ISCC.exe
  110. BIN  isfiles/ISPP.chm
  111. BIN  isfiles/ISPP.dll
  112. +345 −0 isfiles/ISPPBuiltins.iss
  113. BIN  isfiles/Iscmplr.dll
  114. BIN  isfiles/Isppcc.exe
  115. +318 −0 isfiles/Languages/Basque.isl
  116. +341 −0 isfiles/Languages/BrazilianPortuguese.isl
  117. +302 −0 isfiles/Languages/Catalan.isl
  118. +318 −0 isfiles/Languages/Czech.isl
  119. +315 −0 isfiles/Languages/Danish.isl
  120. +297 −0 isfiles/Languages/Dutch.isl
  121. +296 −0 isfiles/Languages/Finnish.isl
  122. +322 −0 isfiles/Languages/French.isl
  123. +306 −0 isfiles/Languages/German.isl
  124. +314 −0 isfiles/Languages/Hebrew.isl
  125. +339 −0 isfiles/Languages/Hungarian.isl
  126. +323 −0 isfiles/Languages/Italian.isl
  127. +303 −0 isfiles/Languages/Japanese.isl
  128. +312 −0 isfiles/Languages/Norwegian.isl
  129. +309 −0 isfiles/Languages/Polish.isl
  130. +301 −0 isfiles/Languages/Portuguese.isl
  131. +307 −0 isfiles/Languages/Russian.isl
  132. +244 −0 isfiles/Languages/Slovak.isl
  133. +307 −0 isfiles/Languages/Slovenian.isl
  134. +316 −0 isfiles/Languages/Spanish.isl
  135. BIN  isfiles/Setup.e32
  136. BIN  isfiles/Setupldr.e32
  137. BIN  isfiles/WizModernImage-IS.bmp
  138. BIN  isfiles/WizModernImage.bmp
  139. BIN  isfiles/WizModernSmallImage-IS.bmp
  140. BIN  isfiles/WizModernSmallImage.bmp
  141. BIN  isfiles/isbunzip.dll
  142. BIN  isfiles/isbzip.dll
  143. BIN  isfiles/isetup.chm
  144. +495 −0 isfiles/isfaq.htm
  145. BIN  isfiles/islzma.dll
  146. BIN  isfiles/islzma32.exe
  147. BIN  isfiles/islzma64.exe
  148. BIN  isfiles/isscint.dll
  149. BIN  isfiles/isunzlib.dll
  150. BIN  isfiles/iszlib.dll
  151. +37 −0 isfiles/license.txt
Sorry, we could not display the entire diff because it was too big.
BIN  isfiles-unicode/Compil32.exe
Binary file not shown
317 isfiles-unicode/Default.isl
@@ -0,0 +1,317 @@
+; *** Inno Setup version 5.1.11+ English messages ***
+;
+; To download user-contributed translations of this file, go to:
+; http://www.jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=English
+LanguageID=$0409
+LanguageCodePage=0
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Setup
+SetupWindowTitle=Setup - %1
+UninstallAppTitle=Uninstall
+UninstallAppFullTitle=%1 Uninstall
+
+; *** Misc. common
+InformationTitle=Information
+ConfirmTitle=Confirm
+ErrorTitle=Error
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=This will install %1. Do you wish to continue?
+LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted
+LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nError %2: %3
+SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program.
+SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program.
+SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program.
+NotOnThisPlatform=This program will not run on %1.
+OnlyOnThisPlatform=This program must be run on %1.
+OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1
+MissingWOW64APIs=The version of Windows you are running does not include functionality required by Setup to perform a 64-bit installation. To correct this problem, please install Service Pack %1.
+WinVersionTooLowError=This program requires %1 version %2 or later.
+WinVersionTooHighError=This program cannot be installed on %1 version %2 or later.
+AdminPrivilegesRequired=You must be logged in as an administrator when installing this program.
+PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program.
+SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.
+UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.
+
+; *** Misc. errors
+ErrorCreatingDir=Setup was unable to create the directory "%1"
+ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files
+
+; *** Setup common messages
+ExitSetupTitle=Exit Setup
+ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup?
+AboutSetupMenuItem=&About Setup...
+AboutSetupTitle=About Setup
+AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< &Back
+ButtonNext=&Next >
+ButtonInstall=&Install
+ButtonOK=OK
+ButtonCancel=Cancel
+ButtonYes=&Yes
+ButtonYesToAll=Yes to &All
+ButtonNo=&No
+ButtonNoToAll=N&o to All
+ButtonFinish=&Finish
+ButtonBrowse=&Browse...
+ButtonWizardBrowse=B&rowse...
+ButtonNewFolder=&Make New Folder
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Select Setup Language
+SelectLanguageLabel=Select the language to use during the installation:
+
+; *** Common wizard text
+ClickNext=Click Next to continue, or Cancel to exit Setup.
+BeveledLabel=
+BrowseDialogTitle=Browse For Folder
+BrowseDialogLabel=Select a folder in the list below, then click OK.
+NewFolderName=New Folder
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Welcome to the [name] Setup Wizard
+WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing.
+
+; *** "Password" wizard page
+WizardPassword=Password
+PasswordLabel1=This installation is password protected.
+PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive.
+PasswordEditLabel=&Password:
+IncorrectPassword=The password you entered is not correct. Please try again.
+
+; *** "License Agreement" wizard page
+WizardLicense=License Agreement
+LicenseLabel=Please read the following important information before continuing.
+LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation.
+LicenseAccepted=I &accept the agreement
+LicenseNotAccepted=I &do not accept the agreement
+
+; *** "Information" wizard pages
+WizardInfoBefore=Information
+InfoBeforeLabel=Please read the following important information before continuing.
+InfoBeforeClickLabel=When you are ready to continue with Setup, click Next.
+WizardInfoAfter=Information
+InfoAfterLabel=Please read the following important information before continuing.
+InfoAfterClickLabel=When you are ready to continue with Setup, click Next.
+
+; *** "User Information" wizard page
+WizardUserInfo=User Information
+UserInfoDesc=Please enter your information.
+UserInfoName=&User Name:
+UserInfoOrg=&Organization:
+UserInfoSerial=&Serial Number:
+UserInfoNameRequired=You must enter a name.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Select Destination Location
+SelectDirDesc=Where should [name] be installed?
+SelectDirLabel3=Setup will install [name] into the following folder.
+SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.
+DiskSpaceMBLabel=At least [mb] MB of free disk space is required.
+ToUNCPathname=Setup cannot install to a UNC pathname. If you are trying to install to a network, you will need to map a network drive.
+InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share
+InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another.
+DiskSpaceWarningTitle=Not Enough Disk Space
+DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway?
+DirNameTooLong=The folder name or path is too long.
+InvalidDirName=The folder name is not valid.
+BadDirName32=Folder names cannot include any of the following characters:%n%n%1
+DirExistsTitle=Folder Exists
+DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway?
+DirDoesntExistTitle=Folder Does Not Exist
+DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Select Components
+SelectComponentsDesc=Which components should be installed?
+SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue.
+FullInstallation=Full installation
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Compact installation
+CustomInstallation=Custom installation
+NoUninstallWarningTitle=Components Exist
+NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Select Additional Tasks
+SelectTasksDesc=Which additional tasks should be performed?
+SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Select Start Menu Folder
+SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts?
+SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder.
+SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.
+MustEnterGroupName=You must enter a folder name.
+GroupNameTooLong=The folder name or path is too long.
+InvalidGroupName=The folder name is not valid.
+BadGroupName=The folder name cannot include any of the following characters:%n%n%1
+NoProgramGroupCheck2=&Don't create a Start Menu folder
+
+; *** "Ready to Install" wizard page
+WizardReady=Ready to Install
+ReadyLabel1=Setup is now ready to begin installing [name] on your computer.
+ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings.
+ReadyLabel2b=Click Install to continue with the installation.
+ReadyMemoUserInfo=User information:
+ReadyMemoDir=Destination location:
+ReadyMemoType=Setup type:
+ReadyMemoComponents=Selected components:
+ReadyMemoGroup=Start Menu folder:
+ReadyMemoTasks=Additional tasks:
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Preparing to Install
+PreparingDesc=Setup is preparing to install [name] on your computer.
+PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name].
+CannotContinue=Setup cannot continue. Please click Cancel to exit.
+
+; *** "Installing" wizard page
+WizardInstalling=Installing
+InstallingLabel=Please wait while Setup installs [name] on your computer.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Completing the [name] Setup Wizard
+FinishedLabelNoIcons=Setup has finished installing [name] on your computer.
+FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed icons.
+ClickFinish=Click Finish to exit Setup.
+FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now?
+FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now?
+ShowReadmeCheck=Yes, I would like to view the README file
+YesRadio=&Yes, restart the computer now
+NoRadio=&No, I will restart the computer later
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Run %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=View %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Setup Needs the Next Disk
+SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse.
+PathLabel=&Path:
+FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder.
+SelectDirectoryLabel=Please specify the location of the next disk.
+
+; *** Installation phase messages
+SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again.
+EntryAbortRetryIgnore=Click Retry to try again, Ignore to proceed anyway, or Abort to cancel installation.
+
+; *** Installation status messages
+StatusCreateDirs=Creating directories...
+StatusExtractFiles=Extracting files...
+StatusCreateIcons=Creating shortcuts...
+StatusCreateIniEntries=Creating INI entries...
+StatusCreateRegistryEntries=Creating registry entries...
+StatusRegisterFiles=Registering files...
+StatusSavingUninstall=Saving uninstall information...
+StatusRunProgram=Finishing installation...
+StatusRollback=Rolling back changes...
+
+; *** Misc. errors
+ErrorInternal2=Internal error: %1
+ErrorFunctionFailedNoCode=%1 failed
+ErrorFunctionFailed=%1 failed; code %2
+ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3
+ErrorExecutingProgram=Unable to execute file:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Error opening registry key:%n%1\%2
+ErrorRegCreateKey=Error creating registry key:%n%1\%2
+ErrorRegWriteKey=Error writing to registry key:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Error creating INI entry in file "%1".
+
+; *** File copying errors
+FileAbortRetryIgnore=Click Retry to try again, Ignore to skip this file (not recommended), or Abort to cancel installation.
+FileAbortRetryIgnore2=Click Retry to try again, Ignore to proceed anyway (not recommended), or Abort to cancel installation.
+SourceIsCorrupted=The source file is corrupted
+SourceDoesntExist=The source file "%1" does not exist
+ExistingFileReadOnly=The existing file is marked as read-only.%n%nClick Retry to remove the read-only attribute and try again, Ignore to skip this file, or Abort to cancel installation.
+ErrorReadingExistingDest=An error occurred while trying to read the existing file:
+FileExists=The file already exists.%n%nWould you like Setup to overwrite it?
+ExistingFileNewer=The existing file is newer than the one Setup is trying to install. It is recommended that you keep the existing file.%n%nDo you want to keep the existing file?
+ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file:
+ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory:
+ErrorReadingSource=An error occurred while trying to read the source file:
+ErrorCopying=An error occurred while trying to copy a file:
+ErrorReplacingExistingFile=An error occurred while trying to replace the existing file:
+ErrorRestartReplace=RestartReplace failed:
+ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory:
+ErrorRegisterServer=Unable to register the DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 failed with exit code %1
+ErrorRegisterTypeLib=Unable to register the type library: %1
+
+; *** Post-installation errors
+ErrorOpeningReadme=An error occurred while trying to open the README file.
+ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually.
+
+; *** Uninstaller messages
+UninstallNotFound=File "%1" does not exist. Cannot uninstall.
+UninstallOpenError=File "%1" could not be opened. Cannot uninstall
+UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall
+UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log
+ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components?
+UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows.
+OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges.
+UninstallStatusLabel=Please wait while %1 is removed from your computer.
+UninstalledAll=%1 was successfully removed from your computer.
+UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually.
+UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now?
+UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Remove Shared File?
+ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm.
+SharedFileNameLabel=File name:
+SharedFileLocationLabel=Location:
+WizardUninstalling=Uninstall Status
+StatusUninstalling=Uninstalling %1...
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 version %2
+AdditionalIcons=Additional icons:
+CreateDesktopIcon=Create a &desktop icon
+CreateQuickLaunchIcon=Create a &Quick Launch icon
+ProgramOnTheWeb=%1 on the Web
+UninstallProgram=Uninstall %1
+LaunchProgram=Launch %1
+AssocFileExtension=&Associate %1 with the %2 file extension
+AssocingFileExtension=Associating %1 with the %2 file extension...
48 isfiles-unicode/Examples/64BitThreeArch.iss
@@ -0,0 +1,48 @@
+; -- 64BitThreeArch.iss --
+; Demonstrates how to install a program built for three different
+; architectures (x86, x64, Itanium) using a single installer.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+Compression=lzma2
+SolidCompression=yes
+OutputDir=userdocs:Inno Setup Examples Output
+; "ArchitecturesInstallIn64BitMode=x64 ia64" requests that the install
+; be done in "64-bit mode" on x64 & Itanium, meaning it should use the
+; native 64-bit Program Files directory and the 64-bit view of the
+; registry. On all other architectures it will install in "32-bit mode".
+ArchitecturesInstallIn64BitMode=x64 ia64
+
+[Files]
+; Install MyProg-x64.exe if running on x64, MyProg-IA64.exe if
+; running on Itanium, MyProg.exe otherwise.
+Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsX64
+Source: "MyProg-IA64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsIA64
+Source: "MyProg.exe"; DestDir: "{app}"; Check: IsOtherArch
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
+
+[Code]
+function IsX64: Boolean;
+begin
+ Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
+end;
+
+function IsIA64: Boolean;
+begin
+ Result := Is64BitInstallMode and (ProcessorArchitecture = paIA64);
+end;
+
+function IsOtherArch: Boolean;
+begin
+ Result := not IsX64 and not IsIA64;
+end;
34 isfiles-unicode/Examples/64BitTwoArch.iss
@@ -0,0 +1,34 @@
+; -- 64BitTwoArch.iss --
+; Demonstrates how to install a program built for two different
+; architectures (x86 and x64) using a single installer.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+Compression=lzma2
+SolidCompression=yes
+OutputDir=userdocs:Inno Setup Examples Output
+; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
+; done in "64-bit mode" on x64, meaning it should use the native
+; 64-bit Program Files directory and the 64-bit view of the registry.
+; On all other architectures it will install in "32-bit mode".
+ArchitecturesInstallIn64BitMode=x64
+; Note: We don't set ProcessorsAllowed because we want this
+; installation to run on all architectures (including Itanium,
+; since it's capable of running 32-bit code too).
+
+[Files]
+; Install MyProg-x64.exe if running in 64-bit mode (x64; see above),
+; MyProg.exe otherwise.
+Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Is64BitInstallMode
+Source: "MyProg.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
32 isfiles-unicode/Examples/64bit.iss
@@ -0,0 +1,32 @@
+; -- 64Bit.iss --
+; Demonstrates installation of a program built for the x64 (a.k.a. AMD64)
+; architecture.
+; To successfully run this installation and the program it installs,
+; you must have the "x64" edition of Windows XP or Windows Server 2003.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+Compression=lzma2
+SolidCompression=yes
+OutputDir=userdocs:Inno Setup Examples Output
+; "ArchitecturesAllowed=x64" specifies that Setup cannot run on
+; anything but x64.
+ArchitecturesAllowed=x64
+; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
+; done in "64-bit mode" on x64, meaning it should use the native
+; 64-bit Program Files directory and the 64-bit view of the registry.
+ArchitecturesInstallIn64BitMode=x64
+
+[Files]
+Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
310 isfiles-unicode/Examples/CodeAutomation.iss
@@ -0,0 +1,310 @@
+; -- CodeAutomation.iss --
+;
+; This script shows how to use IDispatch based COM Automation objects.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+CreateAppDir=no
+DisableProgramGroupPage=yes
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Code]
+
+{--- SQLDMO ---}
+
+const
+ SQLServerName = 'localhost';
+ SQLDMOGrowth_MB = 0;
+
+procedure SQLDMOButtonOnClick(Sender: TObject);
+var
+ SQLServer, Database, DBFile, LogFile: Variant;
+ IDColumn, NameColumn, Table: Variant;
+begin
+ 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
+ Exit;
+
+ { Create the main SQLDMO COM Automation object }
+
+ try
+ SQLServer := CreateOleObject('SQLDMO.SQLServer');
+ except
+ RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
+ end;
+
+ { Connect to the Microsoft SQL Server }
+
+ SQLServer.LoginSecure := True;
+ SQLServer.Connect(SQLServerName);
+
+ MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok);
+
+ { Setup a database }
+
+ Database := CreateOleObject('SQLDMO.Database');
+ Database.Name := 'Inno Setup';
+
+ DBFile := CreateOleObject('SQLDMO.DBFile');
+ DBFile.Name := 'ISData1';
+ DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf';
+ DBFile.PrimaryFile := True;
+ DBFile.FileGrowthType := SQLDMOGrowth_MB;
+ DBFile.FileGrowth := 1;
+
+ Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile);
+
+ LogFile := CreateOleObject('SQLDMO.LogFile');
+ LogFile.Name := 'ISLog1';
+ LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf';
+
+ Database.TransactionLog.LogFiles.Add(LogFile);
+
+ { Add the database }
+
+ SQLServer.Databases.Add(Database);
+
+ MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok);
+
+ { Setup some columns }
+
+ IDColumn := CreateOleObject('SQLDMO.Column');
+ IDColumn.Name := 'id';
+ IDColumn.Datatype := 'int';
+ IDColumn.Identity := True;
+ IDColumn.IdentityIncrement := 1;
+ IDColumn.IdentitySeed := 1;
+ IDColumn.AllowNulls := False;
+
+ NameColumn := CreateOleObject('SQLDMO.Column');
+ NameColumn.Name := 'name';
+ NameColumn.Datatype := 'varchar';
+ NameColumn.Length := '64';
+ NameColumn.AllowNulls := False;
+
+ { Setup a table }
+
+ Table := CreateOleObject('SQLDMO.Table');
+ Table.Name := 'authors';
+ Table.FileGroup := 'PRIMARY';
+
+ { Add the columns and the table }
+
+ Table.Columns.Add(IDColumn);
+ Table.Columns.Add(NameColumn);
+
+ Database.Tables.Add(Table);
+
+ MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok);
+end;
+
+{--- IIS ---}
+
+const
+ IISServerName = 'localhost';
+ IISServerNumber = '1';
+ IISURL = 'http://127.0.0.1';
+
+procedure IISButtonOnClick(Sender: TObject);
+var
+ IIS, WebSite, WebServer, WebRoot, VDir: Variant;
+ ErrorCode: Integer;
+begin
+ 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
+ Exit;
+
+ { Create the main IIS COM Automation object }
+
+ try
+ IIS := CreateOleObject('IISNamespace');
+ except
+ RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
+ end;
+
+ { Connect to the IIS server }
+
+ WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
+ WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
+ WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
+
+ { (Re)create a virtual dir }
+
+ try
+ WebRoot.Delete('IIsWebVirtualDir', 'innosetup');
+ WebRoot.SetInfo();
+ except
+ end;
+
+ VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup');
+ VDir.AccessRead := True;
+ VDir.AppFriendlyName := 'Inno Setup';
+ VDir.Path := 'C:\inetpub\innosetup';
+ VDir.AppCreate(True);
+ VDir.SetInfo();
+
+ MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok);
+
+ { Write some html and display it }
+
+ if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
+ Exit;
+
+ ForceDirectories(VDir.Path);
+ SaveStringToFile(VDir.Path + '/index.htm', '<html><body>Inno Setup rocks!</body></html>', False);
+ if not ShellExecAsOriginalUser('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then
+ MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok);
+end;
+
+{--- MSXML ---}
+
+const
+ XMLURL = 'http://cvs.jrsoftware.org/view/*checkout*/ishelp/isxfunc.xml';
+ XMLFileName = 'isxfunc.xml';
+ XMLFileName2 = 'isxfuncmodified.xml';
+
+procedure MSXMLButtonOnClick(Sender: TObject);
+var
+ XMLHTTP, XMLDoc, NewNode, RootNode: Variant;
+ Path: String;
+begin
+ 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
+ Exit;
+
+ { Create the main MSXML COM Automation object }
+
+ try
+ XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP');
+ except
+ RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
+ end;
+
+ { Download the XML file }
+
+ XMLHTTP.Open('GET', XMLURL, False);
+ XMLHTTP.Send();
+
+ Path := ExpandConstant('{src}\');
+ XMLHTTP.responseXML.Save(Path + XMLFileName);
+
+ MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok);
+
+ { Load the XML File }
+
+ XMLDoc := CreateOleObject('MSXML2.DOMDocument');
+ XMLDoc.async := False;
+ XMLDoc.resolveExternals := False;
+ XMLDoc.load(Path + XMLFileName);
+ if XMLDoc.parseError.errorCode <> 0 then
+ RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason);
+
+ MsgBox('Loaded the XML file.', mbInformation, mb_Ok);
+
+ { Modify the XML document }
+
+ NewNode := XMLDoc.createElement('isxdemo');
+ RootNode := XMLDoc.documentElement;
+ RootNode.appendChild(NewNode);
+ RootNode.lastChild.text := 'Hello, World';
+
+ { Save the XML document }
+
+ XMLDoc.Save(Path + XMLFileName2);
+
+ MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok);
+end;
+
+
+{--- Word ---}
+
+procedure WordButtonOnClick(Sender: TObject);
+var
+ Word: Variant;
+begin
+ if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
+ Exit;
+
+ { Try to get an active Word COM Automation object }
+
+ try
+ Word := GetActiveOleObject('Word.Application');
+ except
+ end;
+
+ if VarIsEmpty(Word) then
+ MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok)
+ else
+ MsgBox('Microsoft Word is running.', mbInformation, mb_Ok)
+end;
+
+{--- Windows Firewall ---}
+
+const
+ NET_FW_IP_VERSION_ANY = 2;
+ NET_FW_SCOPE_ALL = 0;
+
+procedure FirewallButtonOnClick(Sender: TObject);
+var
+ Firewall, Application: Variant;
+begin
+ 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
+ Exit;
+
+ { Create the main Windows Firewall COM Automation object }
+
+ try
+ Firewall := CreateOleObject('HNetCfg.FwMgr');
+ except
+ RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
+ end;
+
+ { Add the authorization }
+
+ Application := CreateOleObject('HNetCfg.FwAuthorizedApplication');
+ Application.Name := 'Setup';
+ Application.IPVersion := NET_FW_IP_VERSION_ANY;
+ Application.ProcessImageFileName := ExpandConstant('{srcexe}');
+ Application.Scope := NET_FW_SCOPE_ALL;
+ Application.Enabled := True;
+
+ Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application);
+
+ MsgBox('Setup is now an authorized application for the current profile', mbInformation, mb_Ok);
+end;
+
+{---}
+
+procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent);
+begin
+ with TButton.Create(WizardForm) do begin
+ Left := ALeft;
+ Top := ATop;
+ Width := WizardForm.CancelButton.Width;
+ Height := WizardForm.CancelButton.Height;
+ Caption := ACaption;
+ OnClick := ANotifyEvent;
+ Parent := WizardForm.WelcomePage;
+ end;
+end;
+
+procedure InitializeWizard();
+var
+ Left, LeftInc, Top, TopInc: Integer;
+begin
+ Left := WizardForm.WelcomeLabel2.Left;
+ LeftInc := WizardForm.CancelButton.Width + ScaleX(8);
+ TopInc := WizardForm.CancelButton.Height + ScaleY(8);
+ Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc;
+
+ CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick);
+ CreateButton(Left + LeftInc, Top, '&Firewall...', @FirewallButtonOnClick);
+ Top := Top + TopInc;
+ CreateButton(Left, Top, '&IIS...', @IISButtonOnClick);
+ Top := Top + TopInc;
+ CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick);
+ Top := Top + TopInc;
+ CreateButton(Left, Top, '&Word...', @WordButtonOnClick);
+end;
+
+
298 isfiles-unicode/Examples/CodeAutomation2.iss
@@ -0,0 +1,298 @@
+; -- CodeAutomation2.iss --
+;
+; This script shows how to use IUnknown based COM Automation objects.
+;
+; REQUIRES UNICODE INNO SETUP!
+;
+; Note: some unneeded interface functions which had special types have been replaced
+; by dummies to avoid having to define those types. Do not remove these dummies as
+; that would change the function indices which is bad. Also, not all function
+; protoypes have been tested, only those used by this example.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+CreateAppDir=no
+DisableProgramGroupPage=yes
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Code]
+
+{--- IShellLink ---}
+
+const
+ CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}';
+
+type
+ IShellLinkW = interface(IUnknown)
+ '{000214F9-0000-0000-C000-000000000046}'
+ procedure Dummy;
+ procedure Dummy2;
+ procedure Dummy3;
+ function GetDescription(pszName: String; cchMaxName: Integer): HResult;
+ function SetDescription(pszName: String): HResult;
+ function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult;
+ function SetWorkingDirectory(pszDir: String): HResult;
+ function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult;
+ function SetArguments(pszArgs: String): HResult;
+ function GetHotkey(var pwHotkey: Word): HResult;
+ function SetHotkey(wHotkey: Word): HResult;
+ function GetShowCmd(out piShowCmd: Integer): HResult;
+ function SetShowCmd(iShowCmd: Integer): HResult;
+ function GetIconLocation(pszIconPath: String; cchIconPath: Integer;
+ out piIcon: Integer): HResult;
+ function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult;
+ function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult;
+ function Resolve(Wnd: HWND; fFlags: DWORD): HResult;
+ function SetPath(pszFile: String): HResult;
+ end;
+
+ IPersist = interface(IUnknown)
+ '{0000010C-0000-0000-C000-000000000046}'
+ function GetClassID(var classID: TGUID): HResult;
+ end;
+
+ IPersistFile = interface(IPersist)
+ '{0000010B-0000-0000-C000-000000000046}'
+ function IsDirty: HResult;
+ function Load(pszFileName: String; dwMode: Longint): HResult;
+ function Save(pszFileName: String; fRemember: BOOL): HResult;
+ function SaveCompleted(pszFileName: String): HResult;
+ function GetCurFile(out pszFileName: String): HResult;
+ end;
+
+procedure IShellLinkButtonOnClick(Sender: TObject);
+var
+ Obj: IUnknown;
+ SL: IShellLinkW;
+ PF: IPersistFile;
+begin
+ { Create the main ShellLink COM Automation object }
+ Obj := CreateComObject(StringToGuid(CLSID_ShellLink));
+
+ { Set the shortcut properties }
+ SL := IShellLinkW(Obj);
+ OleCheck(SL.SetPath(ExpandConstant('{srcexe}')));
+ OleCheck(SL.SetArguments(''));
+ OleCheck(SL.SetShowCmd(SW_SHOWNORMAL));
+
+ { Save the shortcut }
+ PF := IPersistFile(Obj);
+ OleCheck(PF.Save(ExpandConstant('{commondesktop}\CodeAutomation2 Test.lnk'), True));
+
+ MsgBox('Saved a shortcut named ''CodeAutomation2 Test'' on the common desktop.', mbInformation, mb_Ok);
+end;
+
+{--- ITaskScheduler ---}
+
+const
+ CLSID_TaskScheduler = '{148BD52A-A2AB-11CE-B11F-00AA00530503}';
+ CLSID_Task = '{148BD520-A2AB-11CE-B11F-00AA00530503}';
+ IID_Task = '{148BD524-A2AB-11CE-B11F-00AA00530503}';
+ TASK_TIME_TRIGGER_DAILY = 1;
+
+type
+ ITaskScheduler = interface(IUnknown)
+ '{148BD527-A2AB-11CE-B11F-00AA00530503}'
+ function SetTargetComputer(pwszComputer: String): HResult;
+ function GetTargetComputer(out ppwszComputer: String): HResult;
+ procedure Dummy;
+ function Activate(pwszName: String; var riid: TGUID; out ppUnk: IUnknown): HResult;
+ function Delete(pwszName: String): HResult;
+ function NewWorkItem(pwszTaskName: String; var rclsid: TGUID; var riid: TGUID; out ppUnk: IUnknown): HResult;
+ procedure Dummy2;
+ function IsOfType(pwszName: String; var riid: TGUID): HResult;
+ end;
+
+ TDaily = record
+ DaysInterval: WORD;
+ end;
+
+ TWeekly = record
+ WeeksInterval: WORD;
+ rgfDaysOfTheWeek: WORD;
+ end;
+
+ TMonthyDate = record
+ rgfDays: DWORD;
+ rgfMonths: WORD;
+ end;
+
+ TMonthlyDow = record
+ wWhichWeek: WORD;
+ rgfDaysOfTheWeek: WORD;
+ rgfMonths: WORD;
+ end;
+
+ { ROPS doesn't support unions, replace this with the type you need and adjust padding (end size has to be 48). }
+ TTriggerTypeUnion = record
+ Daily: TDaily;
+ Pad1: WORD;
+ Pad2: WORD;
+ Pad3: WORD;
+ end;
+
+ TTaskTrigger = record
+ cbTriggerSize: WORD;
+ Reserved1: WORD;
+ wBeginYear: WORD;
+ wBeginMonth: WORD;
+ wBeginDay: WORD;
+ wEndYear: WORD;
+ wEndMonth: WORD;
+ wEndDay: WORD;
+ wStartHour: WORD;
+ wStartMinute: WORD;
+ MinutesDuration: DWORD;
+ MinutesInterval: DWORD;
+ rgFlags: DWORD;
+ TriggerType: DWORD;
+ Type_: TTriggerTypeUnion;
+ Reserved2: WORD;
+ wRandomMinutesInterval: WORD;
+ end;
+
+ ITaskTrigger = interface(IUnknown)
+ '{148BD52B-A2AB-11CE-B11F-00AA00530503}'
+ function SetTrigger(var pTrigger: TTaskTrigger): HResult;
+ function GetTrigger(var pTrigger: TTaskTrigger): HResult;
+ function GetTriggerString(var ppwszTrigger: String): HResult;
+ end;
+
+ IScheduledWorkItem = interface(IUnknown)
+ '{A6B952F0-A4B1-11D0-997D-00AA006887EC}'
+ function CreateTrigger(out piNewTrigger: Word; out ppTrigger: ITaskTrigger): HResult;
+ function DeleteTrigger(iTrigger: Word): HResult;
+ function GetTriggerCount(out pwCount: Word): HResult;
+ function GetTrigger(iTrigger: Word; var ppTrigger: ITaskTrigger): HResult;
+ function GetTriggerString(iTrigger: Word; out ppwszTrigger: String): HResult;
+ procedure Dummy;
+ procedure Dummy2;
+ function SetIdleWait(wIdleMinutes: Word; wDeadlineMinutes: Word): HResult;
+ function GetIdleWait(out pwIdleMinutes: Word; out pwDeadlineMinutes: Word): HResult;
+ function Run: HResult;
+ function Terminate: HResult;
+ function EditWorkItem(hParent: HWND; dwReserved: DWORD): HResult;
+ procedure Dummy3;
+ function GetStatus(out phrStatus: HResult): HResult;
+ function GetExitCode(out pdwExitCode: DWORD): HResult;
+ function SetComment(pwszComment: String): HResult;
+ function GetComment(out ppwszComment: String): HResult;
+ function SetCreator(pwszCreator: String): HResult;
+ function GetCreator(out ppwszCreator: String): HResult;
+ function SetWorkItemData(cbData: Word; var rgbData: Byte): HResult;
+ function GetWorkItemData(out pcbData: Word; out prgbData: Byte): HResult;
+ function SetErrorRetryCount(wRetryCount: Word): HResult;
+ function GetErrorRetryCount(out pwRetryCount: Word): HResult;
+ function SetErrorRetryInterval(wRetryInterval: Word): HResult;
+ function GetErrorRetryInterval(out pwRetryInterval: Word): HResult;
+ function SetFlags(dwFlags: DWORD): HResult;
+ function GetFlags(out pdwFlags: DWORD): HResult;
+ function SetAccountInformation(pwszAccountName: String; pwszPassword: String): HResult;
+ function GetAccountInformation(out ppwszAccountName: String): HResult;
+ end;
+
+ ITask = interface(IScheduledWorkItem)
+ '{148BD524-A2AB-11CE-B11F-00AA00530503}'
+ function SetApplicationName(pwszApplicationName: String): HResult;
+ function GetApplicationName(out ppwszApplicationName: String): HResult;
+ function SetParameters(pwszParameters: String): HResult;
+ function GetParameters(out ppwszParameters: String): HResult;
+ function SetWorkingDirectory(pwszWorkingDirectory: String): HResult;
+ function GetWorkingDirectory(out ppwszWorkingDirectory: String): HResult;
+ function SetPriority(dwPriority: DWORD): HResult;
+ function GetPriority(out pdwPriority: DWORD): HResult;
+ function SetTaskFlags(dwFlags: DWORD): HResult;
+ function GetTaskFlags(out pdwFlags: DWORD): HResult;
+ function SetMaxRunTime(dwMaxRunTimeMS: DWORD): HResult;
+ function GetMaxRunTime(out pdwMaxRunTimeMS: DWORD): HResult;
+ end;
+
+
+procedure ITaskSchedulerButtonOnClick(Sender: TObject);
+var
+ Obj, Obj2: IUnknown;
+ TaskScheduler: ITaskScheduler;
+ G1, G2: TGUID;
+ Task: ITask;
+ iNewTrigger: WORD;
+ TaskTrigger: ITaskTrigger;
+ TaskTrigger2: TTaskTrigger;
+ PF: IPersistFile;
+begin
+ { Create the main TaskScheduler COM Automation object }
+ Obj := CreateComObject(StringToGuid(CLSID_TaskScheduler));
+
+ { Create the Task COM automation object }
+ TaskScheduler := ITaskScheduler(Obj);
+ G1 := StringToGuid(CLSID_Task);
+ G2 := StringToGuid(IID_Task);
+ //This will throw an exception if the task already exists
+ OleCheck(TaskScheduler.NewWorkItem('CodeAutomation2 Test', G1, G2, Obj2));
+
+ { Set the task properties }
+ Task := ITask(Obj2);
+ OleCheck(Task.SetComment('CodeAutomation2 Test Comment'));
+ OleCheck(Task.SetApplicationName(ExpandConstant('{srcexe}')));
+
+ { Set the task account information }
+ //Uncomment the following and provide actual user info to get a runnable task
+ //OleCheck(Task.SetAccountInformation('username', 'password'));
+
+ { Create the TaskTrigger COM automation object }
+ OleCheck(Task.CreateTrigger(iNewTrigger, TaskTrigger));
+
+ { Set the task trigger properties }
+ with TaskTrigger2 do begin
+ cbTriggerSize := SizeOf(TaskTrigger2);
+ wBeginYear := 2009;
+ wBeginMonth := 10;
+ wBeginDay := 1;
+ wStartHour := 12;
+ TriggerType := TASK_TIME_TRIGGER_DAILY;
+ Type_.Daily.DaysInterval := 1;
+ end;
+ OleCheck(TaskTrigger.SetTrigger(TaskTrigger2));
+
+ { Save the task }
+ PF := IPersistFile(Obj2);
+ OleCheck(PF.Save('', True));
+
+ 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);
+end;
+
+{---}
+
+procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent);
+begin
+ with TButton.Create(WizardForm) do begin
+ Left := ALeft;
+ Top := ATop;
+ Width := (WizardForm.CancelButton.Width*3)/2;
+ Height := WizardForm.CancelButton.Height;
+ Caption := ACaption;
+ OnClick := ANotifyEvent;
+ Parent := WizardForm.WelcomePage;
+ end;
+end;
+
+procedure InitializeWizard();
+var
+ Left, LeftInc, Top, TopInc: Integer;
+begin
+ Left := WizardForm.WelcomeLabel2.Left;
+ LeftInc := (WizardForm.CancelButton.Width*3)/2 + ScaleX(8);
+ TopInc := WizardForm.CancelButton.Height + ScaleY(8);
+ Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc;
+
+ CreateButton(Left, Top, '&IShellLink...', @IShellLinkButtonOnClick);
+ Top := Top + TopInc;
+ CreateButton(Left, Top, '&ITaskScheduler...', @ITaskSchedulerButtonOnClick);
+end;
+
+
+
+
+
361 isfiles-unicode/Examples/CodeClasses.iss
@@ -0,0 +1,361 @@
+; -- CodeClasses.iss --
+;
+; This script shows how to use the WizardForm object and the various VCL classes.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+CreateAppDir=no
+DisableProgramGroupPage=yes
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+WindowVisible=yes
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy
+
+[Code]
+procedure ButtonOnClick(Sender: TObject);
+begin
+ MsgBox('You clicked the button!', mbInformation, mb_Ok);
+end;
+
+procedure BitmapImageOnClick(Sender: TObject);
+begin
+ MsgBox('You clicked the image!', mbInformation, mb_Ok);
+end;
+
+procedure FormButtonOnClick(Sender: TObject);
+var
+ Form: TSetupForm;
+ OKButton, CancelButton: TNewButton;
+begin
+ Form := CreateCustomForm();
+ try
+ Form.ClientWidth := ScaleX(256);
+ Form.ClientHeight := ScaleY(256);
+ Form.Caption := 'TSetupForm';
+ Form.CenterInsideControl(WizardForm, False);
+
+ OKButton := TNewButton.Create(Form);
+ OKButton.Parent := Form;
+ OKButton.Width := ScaleX(75);
+ OKButton.Height := ScaleY(23);
+ OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
+ OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
+ OKButton.Caption := 'OK';
+ OKButton.ModalResult := mrOk;
+
+ CancelButton := TNewButton.Create(Form);
+ CancelButton.Parent := Form;
+ CancelButton.Width := ScaleX(75);
+ CancelButton.Height := ScaleY(23);
+ CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
+ CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
+ CancelButton.Caption := 'Cancel';
+ CancelButton.ModalResult := mrCancel;
+ CancelButton.Cancel := True;
+
+ Form.ActiveControl := OKButton;
+
+ if Form.ShowModal() = mrOk then
+ MsgBox('You clicked OK.', mbInformation, MB_OK);
+ finally
+ Form.Free();
+ end;
+end;
+
+procedure CreateTheWizardPages;
+var
+ Page: TWizardPage;
+ Button, FormButton: TNewButton;
+ Panel: TPanel;
+ CheckBox: TNewCheckBox;
+ Edit: TNewEdit;
+ PasswordEdit: TPasswordEdit;
+ Memo: TNewMemo;
+ ComboBox: TNewComboBox;
+ ListBox: TNewListBox;
+ StaticText, ProgressBarLabel: TNewStaticText;
+ ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar;
+ CheckListBox, CheckListBox2: TNewCheckListBox;
+ FolderTreeView: TFolderTreeView;
+ BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage;
+ BitmapFileName: String;
+ RichEditViewer: TRichEditViewer;
+begin
+ { TButton and others }
+
+ Page := CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TButton and others');
+
+ Button := TNewButton.Create(Page);
+ Button.Width := ScaleX(75);
+ Button.Height := ScaleY(23);
+ Button.Caption := 'TNewButton';
+ Button.OnClick := @ButtonOnClick;
+ Button.Parent := Page.Surface;
+
+ Panel := TPanel.Create(Page);
+ Panel.Width := Page.SurfaceWidth div 2 - ScaleX(8);
+ Panel.Left := Page.SurfaceWidth - Panel.Width;
+ Panel.Height := Button.Height * 2;
+ Panel.Caption := 'TPanel';
+ Panel.Color := clWindow;
+ Panel.ParentBackground := False;
+ Panel.Parent := Page.Surface;
+
+ CheckBox := TNewCheckBox.Create(Page);
+ CheckBox.Top := Button.Top + Button.Height + ScaleY(8);
+ CheckBox.Width := Page.SurfaceWidth div 2;
+ CheckBox.Height := ScaleY(17);
+ CheckBox.Caption := 'TNewCheckBox';
+ CheckBox.Checked := True;
+ CheckBox.Parent := Page.Surface;
+
+ Edit := TNewEdit.Create(Page);
+ Edit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8);
+ Edit.Width := Page.SurfaceWidth div 2 - ScaleX(8);
+ Edit.Text := 'TNewEdit';
+ Edit.Parent := Page.Surface;
+
+ PasswordEdit := TPasswordEdit.Create(Page);
+ PasswordEdit.Left := Page.SurfaceWidth - Edit.Width;
+ PasswordEdit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8);
+ PasswordEdit.Width := Edit.Width;
+ PasswordEdit.Text := 'TPasswordEdit';
+ PasswordEdit.Parent := Page.Surface;
+
+ Memo := TNewMemo.Create(Page);
+ Memo.Top := Edit.Top + Edit.Height + ScaleY(8);
+ Memo.Width := Page.SurfaceWidth;
+ Memo.Height := ScaleY(89);
+ Memo.ScrollBars := ssVertical;
+ Memo.Text := 'TNewMemo';
+ Memo.Parent := Page.Surface;
+
+ FormButton := TNewButton.Create(Page);
+ FormButton.Top := Memo.Top + Memo.Height + ScaleY(8);
+ FormButton.Width := ScaleX(75);
+ FormButton.Height := ScaleY(23);
+ FormButton.Caption := 'TSetupForm';
+ FormButton.OnClick := @FormButtonOnClick;
+ FormButton.Parent := Page.Surface;
+
+ { TComboBox and others }
+
+ Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TComboBox and others');
+
+ ComboBox := TNewComboBox.Create(Page);
+ ComboBox.Width := Page.SurfaceWidth;
+ ComboBox.Parent := Page.Surface;
+ ComboBox.Style := csDropDownList;
+ ComboBox.Items.Add('TComboBox');
+ ComboBox.ItemIndex := 0;
+
+ ListBox := TNewListBox.Create(Page);
+ ListBox.Top := ComboBox.Top + ComboBox.Height + ScaleY(8);
+ ListBox.Width := Page.SurfaceWidth;
+ ListBox.Height := ScaleY(97);
+ ListBox.Parent := Page.Surface;
+ ListBox.Items.Add('TListBox');
+ ListBox.ItemIndex := 0;
+
+ StaticText := TNewStaticText.Create(Page);
+ StaticText.Top := ListBox.Top + ListBox.Height + ScaleY(8);
+ StaticText.Caption := 'TNewStaticText';
+ StaticText.AutoSize := True;
+ StaticText.Parent := Page.Surface;
+
+ ProgressBarLabel := TNewStaticText.Create(Page);
+ ProgressBarLabel.Top := StaticText.Top + StaticText.Height + ScaleY(8);
+ ProgressBarLabel.Caption := 'TNewProgressBar';
+ ProgressBarLabel.AutoSize := True;
+ ProgressBarLabel.Parent := Page.Surface;
+
+ ProgressBar := TNewProgressBar.Create(Page);
+ ProgressBar.Left := ProgressBarLabel.Width + ScaleX(8);
+ ProgressBar.Top := ProgressBarLabel.Top;
+ ProgressBar.Width := Page.SurfaceWidth - ProgressBar.Left;
+ ProgressBar.Height := ProgressBarLabel.Height + ScaleY(8);
+ ProgressBar.Parent := Page.Surface;
+ ProgressBar.Position := 25;
+
+ ProgressBar2 := TNewProgressBar.Create(Page);
+ ProgressBar2.Left := ProgressBarLabel.Width + ScaleX(8);
+ ProgressBar2.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(4);
+ ProgressBar2.Width := Page.SurfaceWidth - ProgressBar.Left;
+ ProgressBar2.Height := ProgressBarLabel.Height + ScaleY(8);
+ ProgressBar2.Parent := Page.Surface;
+ ProgressBar2.Position := 50;
+ { Note: TNewProgressBar.State property only has an effect on Windows Vista and newer }
+ ProgressBar2.State := npbsError;
+
+ ProgressBar3 := TNewProgressBar.Create(Page);
+ ProgressBar3.Left := ProgressBarLabel.Width + ScaleX(8);
+ ProgressBar3.Top := ProgressBar2.Top + ProgressBar2.Height + ScaleY(4);
+ ProgressBar3.Width := Page.SurfaceWidth - ProgressBar.Left;
+ ProgressBar3.Height := ProgressBarLabel.Height + ScaleY(8);
+ ProgressBar3.Parent := Page.Surface;
+ { Note: TNewProgressBar.Style property only has an effect on Windows XP and newer }
+ ProgressBar3.Style := npbstMarquee;
+
+ { TNewCheckListBox }
+
+ Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TNewCheckListBox');
+
+ CheckListBox := TNewCheckListBox.Create(Page);
+ CheckListBox.Width := Page.SurfaceWidth;
+ CheckListBox.Height := ScaleY(97);
+ CheckListBox.Flat := True;
+ CheckListBox.Parent := Page.Surface;
+ CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil);
+ CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, True, True, nil);
+ CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, False, True, nil);
+ CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil);
+
+ CheckListBox2 := TNewCheckListBox.Create(Page);
+ CheckListBox2.Top := CheckListBox.Top + CheckListBox.Height + ScaleY(8);
+ CheckListBox2.Width := Page.SurfaceWidth;
+ CheckListBox2.Height := ScaleY(97);
+ CheckListBox2.BorderStyle := bsNone;
+ CheckListBox2.ParentColor := True;
+ CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight;
+ CheckListBox2.ShowLines := False;
+ CheckListBox2.WantTabs := True;
+ CheckListBox2.Parent := Page.Surface;
+ CheckListBox2.AddGroup('TNewCheckListBox', '', 0, nil);
+ CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, True, True, nil);
+ CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, False, True, nil);
+
+ { TFolderTreeView }
+
+ Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TFolderTreeView');
+
+ FolderTreeView := TFolderTreeView.Create(Page);
+ FolderTreeView.Width := Page.SurfaceWidth;
+ FolderTreeView.Height := Page.SurfaceHeight;
+ FolderTreeView.Parent := Page.Surface;
+ FolderTreeView.Directory := ExpandConstant('{src}');
+
+ { TBitmapImage }
+
+ Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TBitmapImage');
+
+ BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
+ ExtractTemporaryFile(ExtractFileName(BitmapFileName));
+
+ BitmapImage := TBitmapImage.Create(Page);
+ BitmapImage.AutoSize := True;
+ BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
+ BitmapImage.Cursor := crHand;
+ BitmapImage.OnClick := @BitmapImageOnClick;
+ BitmapImage.Parent := Page.Surface;
+
+ BitmapImage2 := TBitmapImage.Create(Page);
+ BitmapImage2.BackColor := $400000;
+ BitmapImage2.Bitmap := BitmapImage.Bitmap;
+ BitmapImage2.Center := True;
+ BitmapImage2.Left := BitmapImage.Width + 10;
+ BitmapImage2.Height := 2*BitmapImage.Height;
+ BitmapImage2.Width := 2*BitmapImage.Width;
+ BitmapImage2.Cursor := crHand;
+ BitmapImage2.OnClick := @BitmapImageOnClick;
+ BitmapImage2.Parent := Page.Surface;
+
+ BitmapImage3 := TBitmapImage.Create(Page);
+ BitmapImage3.Bitmap := BitmapImage.Bitmap;
+ BitmapImage3.Stretch := True;
+ BitmapImage3.Left := 3*BitmapImage.Width + 20;
+ BitmapImage3.Height := 4*BitmapImage.Height;
+ BitmapImage3.Width := 4*BitmapImage.Width;
+ BitmapImage3.Cursor := crHand;
+ BitmapImage3.OnClick := @BitmapImageOnClick;
+ BitmapImage3.Parent := Page.Surface;
+
+ { TRichViewer }
+
+ Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TRichViewer');
+
+ RichEditViewer := TRichEditViewer.Create(Page);
+ RichEditViewer.Width := Page.SurfaceWidth;
+ RichEditViewer.Height := Page.SurfaceHeight;
+ RichEditViewer.Parent := Page.Surface;
+ RichEditViewer.ScrollBars := ssVertical;
+ RichEditViewer.UseRichEdit := True;
+ 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}';
+ RichEditViewer.ReadOnly := True;
+end;
+
+procedure AboutButtonOnClick(Sender: TObject);
+begin
+ MsgBox('This demo shows some features of the various form objects and control classes.', mbInformation, mb_Ok);
+end;
+
+procedure URLLabelOnClick(Sender: TObject);
+var
+ ErrorCode: Integer;
+begin
+ ShellExecAsOriginalUser('open', 'http://www.innosetup.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
+end;
+
+procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton);
+var
+ AboutButton: TNewButton;
+ URLLabel: TNewStaticText;
+begin
+ AboutButton := TNewButton.Create(ParentForm);
+ AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width;
+ AboutButton.Top := CancelButton.Top;
+ AboutButton.Width := CancelButton.Width;
+ AboutButton.Height := CancelButton.Height;
+ AboutButton.Caption := '&About...';
+ AboutButton.OnClick := @AboutButtonOnClick;
+ AboutButton.Parent := ParentForm;
+
+ URLLabel := TNewStaticText.Create(ParentForm);
+ URLLabel.Caption := 'www.innosetup.com';
+ URLLabel.Cursor := crHand;
+ URLLabel.OnClick := @URLLabelOnClick;
+ URLLabel.Parent := ParentForm;
+ { Alter Font *after* setting Parent so the correct defaults are inherited first }
+ URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
+ URLLabel.Font.Color := clBlue;
+ URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
+ URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
+end;
+
+procedure InitializeWizard();
+var
+ BackgroundBitmapImage: TBitmapImage;
+ BackgroundBitmapText: TNewStaticText;
+begin
+ { Custom wizard pages }
+
+ CreateTheWizardPages;
+
+ { Custom controls }
+
+ CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton);
+
+ BackgroundBitmapImage := TBitmapImage.Create(MainForm);
+ BackgroundBitmapImage.Left := 50;
+ BackgroundBitmapImage.Top := 90;
+ BackgroundBitmapImage.AutoSize := True;
+ BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
+ BackgroundBitmapImage.Parent := MainForm;
+
+ BackgroundBitmapText := TNewStaticText.Create(MainForm);
+ BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
+ BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
+ BackgroundBitmapText.Caption := 'TBitmapImage';
+ BackgroundBitmapText.Parent := MainForm;
+end;
+
+procedure InitializeUninstallProgressForm();
+begin
+ { Custom controls }
+
+ CreateAboutButtonAndURLLabel(UninstallProgressForm, UninstallProgressForm.CancelButton);
+end;
+
149 isfiles-unicode/Examples/CodeExample1.iss
@@ -0,0 +1,149 @@
+; -- CodeExample1.iss --
+;
+; This script shows various things you can achieve using a [Code] section
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={code:MyConst}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+InfoBeforeFile=Readme.txt
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.exe'); AfterInstall: AfterMyProgInstall('MyProg.exe')
+Source: "MyProg.chm"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.chm'); AfterInstall: AfterMyProgInstall('MyProg.chm')
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
+
+[Code]
+var
+ MyProgChecked: Boolean;
+ MyProgCheckResult: Boolean;
+ FinishedInstall: Boolean;
+
+function InitializeSetup(): Boolean;
+begin
+ Log('InitializeSetup called');
+ Result := MsgBox('InitializeSetup:' #13#13 'Setup is initializing. Do you really want to start setup?', mbConfirmation, MB_YESNO) = idYes;
+ if Result = False then
+ MsgBox('InitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK);
+end;
+
+procedure DeinitializeSetup();
+var
+ FileName: String;
+ ResultCode: Integer;
+begin
+ Log('DeinitializeSetup called');
+ if FinishedInstall then begin
+ 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
+ FileName := ExpandConstant('{uninstallexe}');
+ if not Exec(FileName, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode) then
+ MsgBox('DeinitializeSetup:' #13#13 'Execution of ''' + FileName + ''' failed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
+ end else
+ MsgBox('DeinitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK);
+ end;
+end;
+
+procedure CurStepChanged(CurStep: TSetupStep);
+begin
+ Log('CurStepChanged(' + IntToStr(Ord(CurStep)) + ') called');
+ if CurStep = ssPostInstall then
+ FinishedInstall := True;
+end;
+
+function NextButtonClick(CurPageID: Integer): Boolean;
+var
+ ResultCode: Integer;
+begin
+ Log('NextButtonClick(' + IntToStr(CurPageID) + ') called');
+ case CurPageID of
+ wpSelectDir:
+ MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK);
+ wpSelectProgramGroup:
+ MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK);
+ wpReady:
+ begin
+ 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
+ ExtractTemporaryFile('myprog.exe');
+ if not Exec(ExpandConstant('{tmp}\myprog.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
+ MsgBox('NextButtonClick:' #13#13 'The file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
+ end;
+ BringToFrontAndRestore();
+ MsgBox('NextButtonClick:' #13#13 'The normal installation will now start.', mbInformation, MB_OK);
+ end;
+ end;
+
+ Result := True;
+end;
+
+function BackButtonClick(CurPageID: Integer): Boolean;
+begin
+ Log('BackButtonClick(' + IntToStr(CurPageID) + ') called');
+ Result := True;
+end;
+
+function ShouldSkipPage(PageID: Integer): Boolean;
+begin
+ Log('ShouldSkipPage(' + IntToStr(PageID) + ') called');
+ { Skip wpInfoBefore page; show all others }
+ case PageID of
+ wpInfoBefore:
+ Result := True;
+ else
+ Result := False;
+ end;
+end;
+
+procedure CurPageChanged(CurPageID: Integer);
+begin
+ Log('CurPageChanged(' + IntToStr(CurPageID) + ') called');
+ case CurPageID of
+ wpWelcome:
+ 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);
+ wpFinished:
+ MsgBox('CurPageChanged:' #13#13 'Welcome to final page of this demo. Click Finish to exit.', mbInformation, MB_OK);
+ end;
+end;
+
+function PrepareToInstall(var NeedsRestart: Boolean): String;
+begin
+ Log('PrepareToInstall() called');
+ 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
+ Result := '<your error text here>.'
+ else
+ Result := '';
+end;
+
+function MyProgCheck(): Boolean;
+begin
+ Log('MyProgCheck() called');
+ if not MyProgChecked then begin
+ 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;
+ MyProgChecked := True;
+ end;
+ Result := MyProgCheckResult;
+end;
+
+procedure BeforeMyProgInstall(S: String);
+begin
+ Log('BeforeMyProgInstall(''' + S + ''') called');
+ MsgBox('BeforeMyProgInstall:' #13#13 'Setup is now going to install ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
+end;
+
+procedure AfterMyProgInstall(S: String);
+begin
+ Log('AfterMyProgInstall(''' + S + ''') called');
+ MsgBox('AfterMyProgInstall:' #13#13 'Setup just installed ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
+end;
+
+function MyConst(Param: String): String;
+begin
+ Log('MyConst(''' + Param + ''') called');
+ Result := ExpandConstant('{pf}');
+end;
+
117 isfiles-unicode/Examples/CodePrepareToInstall.iss
@@ -0,0 +1,117 @@
+; -- CodePrepareToInstall.iss --
+;
+; This script shows how the PrepareToInstall event function can be used to
+; install prerequisites and handle any reboots in between, while remembering
+; user selections across reboots.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}";
+Source: "MyProg.chm"; DestDir: "{app}";
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme;
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
+
+[Code]
+const
+ (*** Customize the following to your own name. ***)
+ RunOnceName = 'My Program Setup restart';
+
+ 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.';
+ QuitMessageError = 'Error. Cannot continue.';
+
+var
+ Restarted: Boolean;
+
+function InitializeSetup(): Boolean;
+begin
+ Restarted := ExpandConstant('{param:restart|0}') = '1';
+
+ if not Restarted then begin
+ Result := not RegValueExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName);
+ if not Result then
+ MsgBox(QuitMessageReboot, mbError, mb_Ok);
+ end else
+ Result := True;
+end;
+
+function DetectAndInstallPrerequisites: Boolean;
+begin
+ (*** Place your prerequisite detection and installation code below. ***)
+ (*** Return False if missing prerequisites were detected but their installation failed, else return True. ***)
+
+ //<your code here>
+
+ Result := True;
+
+ (*** Remove the following block! Used by this demo to simulate a prerequisite install requiring a reboot. ***)
+ if not Restarted then
+ RestartReplace(ParamStr(0), '');
+end;
+
+function Quote(const S: String): String;
+begin
+ Result := '"' + S + '"';
+end;
+
+function AddParam(const S, P, V: String): String;
+begin
+ if V <> '""' then
+ Result := S + ' /' + P + '=' + V;
+end;
+
+function AddSimpleParam(const S, P: String): String;
+begin
+ Result := S + ' /' + P;
+end;
+
+procedure CreateRunOnceEntry;
+var
+ RunOnceData: String;
+begin
+ RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /restart=1';
+ RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}'));
+ RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue));
+ RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue));
+ if WizardNoIcons then
+ RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS');
+ RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False)));
+ RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False)));
+ RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False)));
+
+ (*** Place any custom user selection you want to remember below. ***)
+
+ //<your code here>
+
+ RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, RunOnceData);
+end;
+
+function PrepareToInstall(var NeedsRestart: Boolean): String;
+var
+ ChecksumBefore, ChecksumAfter: String;
+begin
+ ChecksumBefore := MakePendingFileRenameOperationsChecksum;
+ if DetectAndInstallPrerequisites then begin
+ ChecksumAfter := MakePendingFileRenameOperationsChecksum;
+ if ChecksumBefore <> ChecksumAfter then begin
+ CreateRunOnceEntry;
+ NeedsRestart := True;
+ Result := QuitMessageReboot;
+ end;
+ end else
+ Result := QuitMessageError;
+end;
+
+function ShouldSkipPage(PageID: Integer): Boolean;
+begin
+ Result := Restarted;
+end;
+
204 isfiles-unicode/Examples/Codedlg.iss
@@ -0,0 +1,204 @@
+; -- CodeDlg.iss --
+;
+; This script shows how to insert custom wizard pages into Setup and how to handle
+; these pages. Furthermore it shows how to 'communicate' between the [Code] section
+; and the regular Inno Setup sections using {code:...} constants. Finally it shows
+; how to customize the settings text on the 'Ready To Install' page.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DisableProgramGroupPage=yes
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Registry]
+Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
+Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
+Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Name"; ValueData: "{code:GetUser|Name}"
+Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Company"; ValueData: "{code:GetUser|Company}"
+Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "DataDir"; ValueData: "{code:GetDataDir}"
+; etc.
+
+[Dirs]
+Name: {code:GetDataDir}; Flags: uninsneveruninstall
+
+[Code]
+var
+ UserPage: TInputQueryWizardPage;
+ UsagePage: TInputOptionWizardPage;
+ LightMsgPage: TOutputMsgWizardPage;
+ KeyPage: TInputQueryWizardPage;
+ ProgressPage: TOutputProgressWizardPage;
+ DataDirPage: TInputDirWizardPage;
+
+procedure InitializeWizard;
+begin
+ { Create the pages }
+
+ UserPage := CreateInputQueryPage(wpWelcome,
+ 'Personal Information', 'Who are you?',
+ 'Please specify your name and the company for whom you work, then click Next.');
+ UserPage.Add('Name:', False);
+ UserPage.Add('Company:', False);
+
+ UsagePage := CreateInputOptionPage(UserPage.ID,
+ 'Personal Information', 'How will you use My Program?',
+ 'Please specify how you would like to use My Program, then click Next.',
+ True, False);
+ UsagePage.Add('Light mode (no ads, limited functionality)');
+ UsagePage.Add('Sponsored mode (with ads, full functionality)');
+ UsagePage.Add('Paid mode (no ads, full functionality)');
+
+ LightMsgPage := CreateOutputMsgPage(UsagePage.ID,
+ 'Personal Information', 'How will you use My Program?',
+ 'Note: to enjoy all features My Program can offer and to support its development, ' +
+ 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' +
+ 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 +
+ 'Click Back if you want to change your usage mode setting now, or click Next to ' +
+ 'continue with the installation.');
+
+ KeyPage := CreateInputQueryPage(UsagePage.ID,
+ 'Personal Information', 'What''s your registration key?',
+ 'Please specify your registration key and click Next to continue. If you don''t ' +
+ 'have a valid registration key, click Back to choose a different usage mode.');
+ KeyPage.Add('Registration key:', False);
+
+ ProgressPage := CreateOutputProgressPage('Personal Information',
+ 'What''s your registration key?');
+
+ DataDirPage := CreateInputDirPage(wpSelectDir,
+ 'Select Personal Data Directory', 'Where should personal data files be installed?',
+ 'Select the folder in which Setup should install personal data files, then click Next.',
+ False, '');
+ DataDirPage.Add('');
+
+ { Set default values, using settings that were stored last time if possible }
+
+ UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}'));
+ UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}'));
+
+ case GetPreviousData('UsageMode', '') of
+ 'light': UsagePage.SelectedValueIndex := 0;
+ 'sponsored': UsagePage.SelectedValueIndex := 1;
+ 'paid': UsagePage.SelectedValueIndex := 2;
+ else
+ UsagePage.SelectedValueIndex := 1;
+ end;
+
+ DataDirPage.Values[0] := GetPreviousData('DataDir', '');
+end;
+
+procedure RegisterPreviousData(PreviousDataKey: Integer);
+var
+ UsageMode: String;
+begin
+ { Store the settings so we can restore them next time }
+ SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]);
+ SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]);
+ case UsagePage.SelectedValueIndex of
+ 0: UsageMode := 'light';
+ 1: UsageMode := 'sponsored';
+ 2: UsageMode := 'paid';
+ end;
+ SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);
+ SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
+end;
+
+function ShouldSkipPage(PageID: Integer): Boolean;
+begin
+ { Skip pages that shouldn't be shown }
+ if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then
+ Result := True
+ else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then
+ Result := True
+ else
+ Result := False;
+end;
+
+function NextButtonClick(CurPageID: Integer): Boolean;
+var
+ I: Integer;
+begin
+ { Validate certain pages before allowing the user to proceed }
+ if CurPageID = UserPage.ID then begin
+ if UserPage.Values[0] = '' then begin
+ MsgBox('You must enter your name.', mbError, MB_OK);
+ Result := False;
+ end else begin
+ if DataDirPage.Values[0] = '' then
+ DataDirPage.Values[0] := 'C:\' + UserPage.Values[0];
+ Result := True;
+ end;
+ end else if CurPageID = KeyPage.ID then begin
+ { Just to show how 'OutputProgress' pages work.
+ Always use a try..finally between the Show and Hide calls as shown below. }
+ ProgressPage.SetText('Authorizing registration key...', '');
+ ProgressPage.SetProgress(0, 0);
+ ProgressPage.Show;
+ try
+ for I := 0 to 10 do begin
+ ProgressPage.SetProgress(I, 10);
+ Sleep(100);
+ end;
+ finally
+ ProgressPage.Hide;
+ end;
+ if KeyPage.Values[0] = 'inno' then
+ Result := True
+ else begin
+ MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK);
+ Result := False;
+ end;
+ end else
+ Result := True;
+end;
+
+function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
+ MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
+var
+ S: String;
+begin
+ { Fill the 'Ready Memo' with the normal settings and the custom settings }
+ S := '';
+ S := S + 'Personal Information:' + NewLine;
+ S := S + Space + UserPage.Values[0] + NewLine;
+ if UserPage.Values[1] <> '' then
+ S := S + Space + UserPage.Values[1] + NewLine;
+ S := S + NewLine;
+
+ S := S + 'Usage Mode:' + NewLine + Space;
+ case UsagePage.SelectedValueIndex of
+ 0: S := S + 'Light mode';
+ 1: S := S + 'Sponsored mode';
+ 2: S := S + 'Paid mode';
+ end;
+ S := S + NewLine + NewLine;
+
+ S := S + MemoDirInfo + NewLine;
+ S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine;
+
+ Result := S;
+end;
+
+function GetUser(Param: String): String;
+begin
+ { Return a user value }
+ { Could also be split into separate GetUserName and GetUserCompany functions }
+ if Param = 'Name' then
+ Result := UserPage.Values[0]
+ else if Param = 'Company' then
+ Result := UserPage.Values[1];
+end;
+
+function GetDataDir(Param: String): String;
+begin
+ { Return the selected DataDir }
+ Result := DataDirPage.Values[0];
+end;
72 isfiles-unicode/Examples/Codedll.iss
@@ -0,0 +1,72 @@
+; -- CodeDll.iss --
+;
+; This script shows how to call DLL functions at runtime from a [Code] section.
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DisableProgramGroupPage=yes
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+; Install our DLL to {app} so we can access it at uninstall time
+; Use "Flags: dontcopy" if you don't need uninstall time access
+Source: "MyDll.dll"; DestDir: "{app}"
+
+[Code]
+const
+ MB_ICONINFORMATION = $40;
+
+//importing a Windows API function
+function MessageBox(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal): Integer;
+external 'MessageBoxA@user32.dll stdcall';
+
+//importing a custom DLL function, first for Setup, then for uninstall
+procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
+external 'MyDllFunc@files:MyDll.dll stdcall setuponly';
+
+procedure MyDllFuncUninstall(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
+external 'MyDllFunc@{app}\MyDll.dll stdcall uninstallonly';
+
+//importing a function for a DLL which might not exist at runtime
+procedure DelayLoadedFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
+external 'DllFunc@DllWhichMightNotExist.dll stdcall delayload';
+
+function NextButtonClick(CurPage: Integer): Boolean;
+var
+ hWnd: Integer;
+begin
+ if CurPage = wpWelcome then begin
+ hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
+
+ MessageBox(hWnd, 'Hello from Windows API function', 'MessageBoxA', MB_OK or MB_ICONINFORMATION);
+
+ MyDllFuncSetup(hWnd, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION);
+
+ try
+ //if this DLL does not exist (it shouldn't), an exception will be raised
+ DelayLoadedFunc(hWnd, 'Hello from delay loaded function', 'DllFunc', MB_OK or MB_ICONINFORMATION);
+ except
+ //handle missing dll here
+ end;
+ end;
+ Result := True;
+end;
+
+procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
+begin
+ // Call our function just before the actual uninstall process begins
+ if CurUninstallStep = usUninstall then
+ begin
+ MyDllFuncUninstall(0, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION);
+
+ // Now that we're finished with it, unload MyDll.dll from memory.
+ // We have to do this so that the uninstaller will be able to remove the DLL and the {app} directory.
+ UnloadDLL(ExpandConstant('{app}\MyDll.dll'));
+ end;
+end;
33 isfiles-unicode/Examples/Components.iss
@@ -0,0 +1,33 @@
+; -- Components.iss --
+; Demonstrates a components-based installation.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Types]
+Name: "full"; Description: "Full installation"
+Name: "compact"; Description: "Compact installation"
+Name: "custom"; Description: "Custom installation"; Flags: iscustom
+
+[Components]
+Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
+Name: "help"; Description: "Help File"; Types: full
+Name: "readme"; Description: "Readme File"; Types: full
+Name: "readme\en"; Description: "English"; Flags: exclusive
+Name: "readme\de"; Description: "German"; Flags: exclusive
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"; Components: program
+Source: "MyProg.chm"; DestDir: "{app}"; Components: help
+Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
+Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
22 isfiles-unicode/Examples/Example1.iss
@@ -0,0 +1,22 @@
+; -- Example1.iss --
+; Demonstrates copying 3 files and creating an icon.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+Compression=lzma2
+SolidCompression=yes
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
24 isfiles-unicode/Examples/Example2.iss
@@ -0,0 +1,24 @@
+; -- Example2.iss --
+; Same as Example1.iss, but creates its icon in the Programs folder of the
+; Start Menu instead of in a subfolder, and also creates a desktop icon.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+; Since no icons will be created in "{group}", we don't need the wizard
+; to ask for a Start Menu folder name:
+DisableProgramGroupPage=yes
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{commonprograms}\My Program"; Filename: "{app}\MyProg.exe"
+Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"
35 isfiles-unicode/Examples/Example3.iss
@@ -0,0 +1,35 @@
+; -- Example3.iss --
+; Same as Example1.iss, but creates some registry entries too.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName=My Program
+AppVersion=1.5
+DefaultDirName={pf}\My Program
+DefaultGroupName=My Program
+UninstallDisplayIcon={app}\MyProg.exe
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"
+Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
+
+[Icons]
+Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
+
+; NOTE: Most apps do not need registry entries to be pre-created. If you
+; don't know what the registry is or if you need to use it, then chances are
+; you don't need a [Registry] section.
+
+[Registry]
+; Start "Software\My Company\My Program" keys under HKEY_CURRENT_USER
+; and HKEY_LOCAL_MACHINE. The flags tell it to always delete the
+; "My Program" keys upon uninstall, and delete the "My Company" keys
+; if there is nothing left in them.
+Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
+Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
+Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
+Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
+Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
44 isfiles-unicode/Examples/ISPPExample1.iss
@@ -0,0 +1,44 @@
+; -- ISPPExample1.iss --
+;
+; This script shows various basic things you can achieve using Inno Setup Preprocessor (ISPP).
+; To enable commented #define's, either remove the ';' or use ISCC with the /D switch.
+
+#pragma option -v+
+#pragma verboselevel 9
+
+;#define Debug
+
+;#define AppEnterprise
+
+#ifdef AppEnterprise
+ #define AppName "My Program Enterprise Edition"
+#else
+ #define AppName "My Program"
+#endif
+
+#define AppVersion GetFileVersion(AddBackslash(SourcePath) + "MyProg.exe")
+
+[Setup]
+AppName={#AppName}
+AppVersion={#AppVersion}
+DefaultDirName={pf}\{#AppName}
+DefaultGroupName={#AppName}
+UninstallDisplayIcon={app}\MyProg.exe
+LicenseFile={#file AddBackslash(SourcePath) + "ISPPExample1License.txt"}
+VersionInfoVersion={#AppVersion}
+OutputDir=userdocs:Inno Setup Examples Output
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+#ifdef AppEnterprise
+Source: "MyProg.chm"; DestDir: "{app}"
+#endif
+Source: "Readme.txt"; DestDir: "{app}"; \
+ Flags: isreadme
+
+[Icons]
+Name: "{group}\{#AppName}"; Filename: "{app}\MyProg.exe"
+
+#ifdef Debug
+ #expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
+#endif
4 isfiles-unicode/Examples/ISPPExample1License.txt
@@ -0,0 +1,4 @@
+#pragma option -e+
+{#AppName} version {#AppVersion} License
+
+Bla bla bla
59 isfiles-unicode/Examples/Languages.iss
@@ -0,0 +1,59 @@
+; -- Languages.iss --
+; Demonstrates a multilingual installation.
+
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
+
+[Setup]
+AppName={cm:MyAppName}
+AppId=My Program
+AppVerName={cm:MyAppVerName,1.5}
+DefaultDirName={pf}\{cm:MyAppName}
+DefaultGroupName={cm:MyAppName}
+UninstallDisplayIcon={app}\MyProg.exe
+VersionInfoDescription=My Program Setup
+VersionInfoProductName=My Program
+OutputDir=userdocs:Inno Setup Examples Output
+; Uncomment the following line to disable the "Select Setup Language"
+; dialog and have it rely solely on auto-detection.
+;ShowLanguageDialog=no
+; If you want all languages to be listed in the "Select Setup Language"
+; dialog, even those that can't be displayed in the active code page,
+; uncomment the following line. Note: Unicode Inno Setup always displays
+; all languages.
+;ShowUndisplayableLanguages=yes
+
+[Languages]
+Name: en; MessagesFile: "compiler:Default.isl"
+Name: nl; MessagesFile: "compiler:Languages\Dutch.isl"
+Name: de; MessagesFile: "compiler:Languages\German.isl"
+
+[Messages]
+en.BeveledLabel=English
+nl.BeveledLabel=Nederlands
+de.BeveledLabel=Deutsch
+
+[CustomMessages]
+en.MyDescription=My description
+en.MyAppName=My Program
+en.MyAppVerName=My Program %1
+nl.MyDescription=Mijn omschrijving
+nl.MyAppName=Mijn programma
+nl.MyAppVerName=Mijn programma %1
+de.MyDescription=Meine Beschreibung
+de.MyAppName=Meine Anwendung
+de.MyAppVerName=Meine Anwendung %1
+
+[Files]
+Source: "MyProg.exe"; DestDir: "{app}"
+Source: "MyProg.chm"; DestDir: "{app}"; Languages: en
+Source: "Readme.txt"; DestDir: "{app}"; Languages: en; Flags: isreadme
+Source: "Readme-Dutch.txt"; DestName: "Leesmij.txt"; DestDir: "{app}"; Languages: nl; Flags: isreadme
+Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Languages: de; Flags: isreadme
+
+[Icons]
+Name: "{group}\{cm:MyAppName}"; Filename: "{app}\MyProg.exe"
+Name: "{group}\{cm:UninstallProgram,{cm:MyAppName}}"; Filename: "{uninstallexe}"
+
+[Tasks]
+; The following task doesn't do anything and is only meant to show [CustomMessages] usage
+Name: mytask; Description: "{cm:MyDescription}"
6 isfiles-unicode/Examples/MyDll/C/Mydll.c
@@ -0,0 +1,6 @@
+#include <windows.h>
+
+void __stdcall MyDllFunc(HWND hWnd, char *lpText, char *lpCaption, UINT uType)
+{
+ MessageBox(hWnd, lpText, lpCaption, uType);
+}
2  isfiles-unicode/Examples/MyDll/C/Mydll.def
@@ -0,0 +1,2 @@
+EXPORTS
+ MyDllFunc
76 isfiles-unicode/Examples/MyDll/C/Mydll.dsp
@@ -0,0 +1,76 @@
+# Microsoft Developer Studio Project File - Name="MyDll" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=MyDll - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "MyDll.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "MyDll.mak" CFG="MyDll - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "MyDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "."
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# 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
+# 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
+# Begin Target
+
+# Name "MyDll - Win32 Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\MyDll.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\MyDll.def
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
14 isfiles-unicode/Examples/MyDll/Delphi/Mydll.dpr
@@ -0,0 +1,14 @@
+library MyDll;
+
+uses
+ Windows;
+
+procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: PAnsiChar; uType: Cardinal); stdcall;
+begin
+ MessageBoxA(hWnd, lpText, lpCaption, uType);
+end;
+
+exports MyDllFunc;
+
+begin
+end.
BIN  isfiles-unicode/Examples/MyProg-IA64.exe
Binary file not shown
BIN  isfiles-unicode/Examples/MyProg-x64.exe
Binary file not shown
BIN  isfiles-unicode/Examples/Mydll.dll
Binary file not shown
BIN  isfiles-unicode/Examples/Myprog.chm
Binary file not shown
BIN  isfiles-unicode/Examples/Myprog.exe
Binary file not shown
1  isfiles-unicode/Examples/Readme-Dutch.txt
@@ -0,0 +1 @@
+Dit is het Leesmij bestand voor My Program.
1  isfiles-unicode/Examples/Readme-German.txt
@@ -0,0 +1 @@
+Dies ist die LIESMICH-Datei für "My Program".
1  isfiles-unicode/Examples/Readme.txt
@@ -0,0 +1 @@
+This is the README file for My Program.