1 ; ID line follows -- this is updated by SVN
2 ; $Id: WinMerge.iss 7150 2010-05-04 17:26:43Z kimmov $
4 ; Programmed by: Christian Blackburn, Christian List, Kimmo Varis,
5 ; Purpose: The is the Inno Setup installation script for distributing our WinmMerge application.
6 ; Tools Needed To Compile: Inno Setup 5.1.7+ (http://www.jrsoftware.org/isdl.php), Inno Setup QuickStart Pack 5.1.7+(http://www.jrsoftware.org/isdl.php)
7 ; note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function
8 ;Directly Dependant Files: Because this is an installer. It would be difficult to list and maintain each of the files referenced
9 ; throughout the script in the header. If you search this plain text script for a particular file in our Subversio repository and it
10 ; doesn't appear then this script is not directly dependant on that file.
11 ;Compilation Instructions: 1. Open this file in Inno Setup or ISTool
12 ; 2. Make sure Compression=LZMA/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during
13 ; development to speed up compilation, however at release we want the intaller to be as strong as possible.
14 ; 3. Check all files are present:
16 ; 4. Compile the script: "Project" --> "Verify Files..."
17 ; -From Inno Setup "Click "Build" --> "Compile"
18 ; -From ISTool Click "Project" --> "Compile Setup"
19 ; 5. The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.
21 ; Installer To Do List:
22 ; # Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL (Use GetCurentFileName)
23 ; # Provide the option to or not to assign the Ctrl+Alt+M accelerator to WinMerge., make sure it's turned on for at least one icon
24 ; # Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)
25 ; # We need to unregister, and delete the ShellExtension Dll if the user doesn't want it, during installation
27 ; # Display integration options in gray rather than hiding them if the user doesn't have the application in question installed
28 ; # We need to ask those that have the RCLLocalization.dll in their plugins folder if they actually want it, their answer will need to be stored in the registry
29 ; # Write code to detect "\Programs\WinMerge\WinMerge" type start menu installs
31 ; Custom Installer Pages:
32 ; # Bundle 7-Zip with WinMerge or provide on the fly download capability.
33 ; # Allow users to set their working directory via a custom installer page
35 ; Things that make the user's life easier:
36 ; # Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)
37 ; # Add "WinMerge is running would you like to close it now?" support with programmatic termination
38 ; -Note: We'll need to add a declares statement to our ISX code so that we can use FindWindowEx directly or a mutex search or two
39 ; # Rather than requiring users to restart we could just kill all intances of Explorer.exe, but we'll need to prompt the user first and restart it
40 ; once the ShellExtension.dll file has been added or removed.
42 ; Non-Essential Features:
43 ; # See about getting a higher resolution copy of the Users's Guide.ico source art from somebody (A 32x32, and or 48x48 would be nice)
44 ; # Using the registry set the order our icons appear within their group in the start menu.:
48 ; 4. WinMerge on the Web
49 ; 5. Uninstall WinMerge
50 ; # Create the ability to install to two start menu groups simultaneously
52 ; Not yet possible (Limited by Inno Setup):
53 ; # While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?
55 #define AppVersion GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe")
56 #define FriendlyAppVersion Copy(GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe"), 1, 5)
61 AppVersion={#AppVersion}
62 AppVerName=WinMerge {#AppVersion}
63 AppPublisher=Thingamahoochie Software
64 AppPublisherURL=http://WinMerge.org/
65 AppSupportURL=http://WinMerge.org/
66 AppUpdatesURL=http://WinMerge.org/
68 ; Installer executable's version resource info
69 VersionInfoCompany=http://winmerge.org
70 VersionInfoDescription=WinMerge Installer
71 VersionInfoVersion={#AppVersion}
73 ;This is in case an older version of the installer happened to be
76 ;Tells the installer to only display a select language dialog if the an exact match wasn't found
77 ShowLanguageDialog=auto
79 DefaultDirName={pf}\WinMerge
80 DefaultGroupName=WinMerge
81 DisableStartupPrompt=true
83 InfoBeforeFile=..\..\Docs\users\GPL.rtf
84 InfoAfterFile=..\..\Docs\users\ReadMe.txt
86 OutputBaseFilename=WinMerge-{#AppVersion}-Setup
88 ;This must be admin to install C++ Runtimes and shell extension
89 PrivilegesRequired=admin
91 UninstallDisplayIcon={app}\{code:ExeName}
94 WizardImageFile=Art\Large Logo.bmp
95 WizardSmallImageFile=Art\Small Logo.bmp
96 WizardImageStretch=false
98 ;It is confusing, if Setup/Uninstall use the same icon like WinMerge!
99 ;SetupIconFile=..\..\src\res\Merge.ico
101 ;Compression Parameters
102 ;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max
103 ;they also require 320 MB of memory for compression. If you're system has at least 256MB RAM then by all
104 ;means set it to ultra before compilation
105 Compression=lzma/ultra
106 InternalCompressLevel=ultra
107 SolidCompression=true
109 ; Update file associations for shell (project files)
110 ChangesAssociations=true
112 ChangesEnvironment=true
113 OutputDir=..\..\Build
114 AlwaysShowComponentsList=true
118 ;Inno Setup's Native Language
119 Name: English; MessagesFile: ..\..\Translations\InnoSetup\English.isl
122 Name: Bulgarian; MessagesFile: ..\..\Translations\InnoSetup\Bulgarian.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\\Docs\Readme\ReadMe-Bulgarian.txt
123 Name: Catalan; MessagesFile: ..\..\Translations\InnoSetup\Catalan.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\\Docs\Readme\ReadMe-Catalan.txt
124 Name: Chinese_Simplified; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Simplified.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\\Docs\Readme\ReadMe-ChineseSimplified.txt
125 Name: Chinese_Traditional; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Traditional.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\\Docs\Readme\ReadMe-ChineseTraditional.txt
126 Name: Croatian; MessagesFile: ..\..\Translations\InnoSetup\Croatian.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\\Docs\Readme\ReadMe-Croatian.txt
127 Name: Czech; MessagesFile: ..\..\Translations\InnoSetup\Czech.isl
128 Name: Danish; MessagesFile: ..\..\Translations\InnoSetup\Danish.isl
129 Name: Dutch; MessagesFile: ..\..\Translations\InnoSetup\Dutch.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Dutch.txt
130 Name: French; MessagesFile: ..\..\Translations\InnoSetup\French.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-French.txt
131 Name: Galician; MessagesFile: ..\..\Translations\InnoSetup\Galician.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Galician.txt
132 Name: German; MessagesFile: ..\..\Translations\InnoSetup\German.isl
133 Name: Greek; MessagesFile: ..\..\Translations\InnoSetup\Greek.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Greek.txt
134 Name: Hungarian; MessagesFile: ..\..\Translations\InnoSetup\Hungarian.isl
135 Name: Italian; MessagesFile: ..\..\Translations\InnoSetup\Italian.isl
136 Name: Japanese; MessagesFile: ..\..\Translations\InnoSetup\Japanese.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Build\Docs\ReadMe-Japanese.txt
137 Name: Korean; MessagesFile: ..\..\Translations\InnoSetup\Korean.isl
138 Name: Norwegian; MessagesFile: ..\..\Translations\InnoSetup\Norwegian.isl
139 Name: Persian; MessagesFile: ..\..\Translations\InnoSetup\Persian.isl
140 Name: Polish; MessagesFile: ..\..\Translations\InnoSetup\Polish.isl
141 Name: Portuguese; MessagesFile: ..\..\Translations\InnoSetup\Portuguese.isl
142 Name: PortugueseBrazilian; MessagesFile: ..\..\Translations\InnoSetup\Brazilian_Portuguese.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt
143 Name: Romanian; MessagesFile: ..\..\Translations\InnoSetup\Romanian.isl
144 Name: Russian; MessagesFile: ..\..\Translations\InnoSetup\Russian.isl
145 Name: Serbian; MessagesFile: ..\..\Translations\InnoSetup\Serbian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt
146 Name: Slovak; MessagesFile: ..\..\Translations\InnoSetup\Slovak.isl
147 Name: Slovenian; MessagesFile: ..\..\Translations\InnoSetup\Slovenian.isl
148 Name: Spanish; MessagesFile: ..\..\Translations\InnoSetup\Spanish.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Spanish.txt
149 Name: Swedish; MessagesFile: ..\..\Translations\InnoSetup\Swedish.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Swedish.txt
150 Name: Turkish; MessagesFile: ..\..\Translations\InnoSetup\Turkish.isl
151 Name: Ukrainian; MessagesFile: ..\..\Translations\InnoSetup\Ukrainian.isl; InfoAfterFile: ..\..\Docs\Users\..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt
155 English.FinishedLabel=Setup has finished installing WinMerge on your computer.
156 English.SetupAppTitle=Setup - WinMerge {#AppVersion}
157 English.WizardInfoBefore=License Agreement
158 English.InfoBeforeLabel=GNU General Public License
162 Name: typical; Description: {cm:TypicalInstallation}
163 Name: full; Description: {cm:FullInstallation}
164 Name: compact; Description: {cm:CompactInstallation}
165 Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom
169 ; Executable, libraries, documentation
170 Name: Core; Description: {cm:AppCoreFiles}; Types: full custom typical compact; Flags: fixed
172 Name: filters; Description: {cm:Filters}; Flags: disablenouninstallwarning; Types: full typical
173 Name: Plugins; Description: {cm:Plugins}; Flags: disablenouninstallwarning; Types: full
176 Name: Languages; Description: {cm:Languages}; Flags: disablenouninstallwarning
177 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Bulgarian
178 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Bulgarian
180 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Catalan
181 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Catalan
183 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Simplified
184 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Simplified
186 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Traditional
187 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Traditional
189 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Croatian
190 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Croatian
192 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Czech
193 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Czech
195 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Danish
196 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Danish
198 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Dutch
199 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Dutch
201 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not French
202 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: French
204 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Galician
205 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Galician
207 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not German
208 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: German
210 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Greek
211 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Greek
213 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Hungarian
214 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Hungarian
216 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Italian
217 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Italian
219 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Japanese
220 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Japanese
222 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Korean
223 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Korean
225 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Norwegian
226 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Norwegian
228 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Persian
229 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Persian
231 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Polish
232 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Polish
234 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Portuguese
235 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Portuguese
237 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not PortugueseBrazilian
238 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: PortugueseBrazilian
240 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Romanian
241 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Romanian
243 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Russian
244 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Russian
246 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Serbian
247 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Serbian
249 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovak
250 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovak
252 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovenian
253 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovenian
255 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Spanish
256 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Spanish
258 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Swedish
259 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Swedish
261 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Turkish
262 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Turkish
264 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Ukrainian
265 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Ukrainian
269 Name: ShellExtension; Description: {cm:ExplorerContextMenu}; GroupDescription: {cm:OptionalFeatures}
270 Name: modifypath; Description: {cm:AddToPath}; GroupDescription: {cm:OptionalFeatures}; Flags: unchecked
271 Name: TortoiseCVS; Description: {cm:IntegrateTortoiseCVS}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseCVSInstalled
272 Name: TortoiseSVN; Description: {cm:IntegrateTortoiseSVN}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseSVNInstalled; MinVersion: 0,5.0.2195sp3
273 Name: ClearCase; Description: {cm:IntegrateClearCase}; GroupDescription: {cm:OptionalFeatures}; Check: ClearCaseInstalled
274 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
275 Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}
278 ; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.
279 Type: files; Name: {app}\Diff.txt
281 ;All of these files are removed so if the user upgrades their operating system or changes their language selections only the
282 ;necessary files will be left in the installation folder
283 ;Another reason these files might be strays is if a user extracted one of the experimental builds such as:
284 ;WinMerge.{#AppVersion}-exe.7z.
285 Name: {app}\WinMerge.exe; Type: files
286 Name: {app}\WinMergeU.exe; Type: files; MinVersion: 0, 4
288 ;Remove manifest files as we don't need them in 2.6.2 / 2.7.1.1 or later
289 Name: {app}\WinMerge.exe.manifest; Type: files
290 Name: {app}\WinMergeU.exe.manifest; Type: files
292 Name: {app}\Merge7z311.dll; Type: files
293 Name: {app}\Merge7z311U.dll; Type: files; MinVersion: 0, 4
295 Name: {app}\Merge7z312.dll; Type: files
296 Name: {app}\Merge7z312U.dll; Type: files; MinVersion: 0, 4
298 Name: {app}\Merge7z313.dll; Type: files
299 Name: {app}\Merge7z313U.dll; Type: files; MinVersion: 0, 4
301 Name: {app}\Merge7z420.dll; Type: files
302 Name: {app}\Merge7z420U.dll; Type: files; MinVersion: 0, 4
304 Name: {app}\Merge7z423.dll; Type: files
305 Name: {app}\Merge7z423U.dll; Type: files; MinVersion: 0, 4
307 Name: {app}\Merge7z431.dll; Type: files
308 Name: {app}\Merge7z431U.dll; Type: files; MinVersion: 0, 4
310 Name: {app}\Merge7z432.dll; Type: files
311 Name: {app}\Merge7z432U.dll; Type: files; MinVersion: 0, 4
313 Name: {app}\Merge7z442.dll; Type: files
314 Name: {app}\Merge7z442U.dll; Type: files; MinVersion: 0, 4
316 Name: {app}\Merge7z457.dll; Type: files
317 Name: {app}\Merge7z457U.dll; Type: files; MinVersion: 0, 4
319 Name: {app}\Merge7z465.dll; Type: files
320 Name: {app}\Merge7z465U.dll; Type: files; MinVersion: 0, 4
322 ;This won't work, because the file has to be unregistered, and explorer closed, first.
323 ;Name: {app}\ShellExtension.dll; Type: files; Check: TaskDisabled('ShellExtension')
325 ; Remove existing .lang files - we don't need them anymore as we are
326 ; using PO files now.
327 Name: {app}\Languages\MergeBrazilian.lang; Type: files
328 Name: {app}\Languages\MergeBulgarian.lang; Type: files
329 Name: {app}\Languages\MergeCatalan.lang; Type: files
330 Name: {app}\Languages\MergeChineseSimplified.lang; Type: files
331 Name: {app}\Languages\MergeChineseTraditional.lang; Type: files
332 Name: {app}\Languages\MergeCzech.lang; Type: files
333 Name: {app}\Languages\MergeDanish.lang; Type: files
334 Name: {app}\Languages\MergeDutch.lang; Type: files
335 Name: {app}\Languages\MergeFrench.lang; Type: files
336 Name: {app}\Languages\MergeGerman.lang; Type: files
337 Name: {app}\Languages\MergeHungarian.lang; Type: files
338 Name: {app}\Languages\MergeItalian.lang; Type: files
339 Name: {app}\Languages\MergeJapanese.lang; Type: files
340 Name: {app}\Languages\MergeKorean.lang; Type: files
341 Name: {app}\Languages\MergeNorwegian.lang; Type: files
342 Name: {app}\Languages\MergePersian.lang; Type: files
343 Name: {app}\Languages\MergePolish.lang; Type: files
344 Name: {app}\Languages\MergePortuguese.lang; Type: files
345 Name: {app}\Languages\MergeSlovak.lang; Type: files
346 Name: {app}\Languages\MergeSpanish.lang; Type: files
347 Name: {app}\Languages\MergeRussian.lang; Type: files
348 Name: {app}\Languages\MergeSerbian.lang; Type: files
349 Name: {app}\Languages\MergeSwedish.lang; Type: files
350 Name: {app}\Languages\MergeTurkish.lang; Type: files
351 Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected('Plugins')
353 ;Removes the user's guide icon if the user deselects the user's guide component.
354 Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs')
356 ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed
357 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')
358 Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')
360 ;This removes the desktop icon in case the user chooses not to install it after previously having it installed
361 Name: {userdesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')
362 Name: {commondesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')
364 ;Remove ANSI executable link from start menu for NT-based Windows versions
365 ;This was installed earlier, but not anymore.
366 Name: {group}\WinMerge (ANSI).lnk; Type: files; MinVersion: 0,4
367 Name: {app}\Docs; Type: filesandordirs
369 Name: {app}\MergePlugins\editor addin.sct; Type: Files; Check: not IsComponentSelected('Plugins')
370 Name: {app}\MergePlugins\insert datetime.sct; Type: Files; Check: not IsComponentSelected('Plugins')
371 Name: {app}\MergePlugins; Type: DirIfEmpty; Check: not IsComponentSelected('Plugins')
373 Name: {app}\Filters\ADAMulti.flt; Type: Files; Check: not IsComponentSelected('Filters')
374 Name: {app}\Filters\ASPNET.flt; Type: Files; Check: not IsComponentSelected('Filters')
375 Name: {app}\Filters\CSharp_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')
376 Name: {app}\Filters\Delphi.flt; Type: Files; Check: not IsComponentSelected('Filters')
377 Name: {app}\Filters\MASM.flt; Type: Files; Check: not IsComponentSelected('Filters')
378 Name: {app}\Filters\Merge_GnuC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')
379 Name: {app}\Filters\Merge_VC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')
380 Name: {app}\Filters\Merge_VB_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')
381 Name: {app}\Filters\SourceControl.flt; Type: Files; Check: not IsComponentSelected('Filters')
382 Name: {app}\Filters\Symbian.flt; Type: Files; Check: not IsComponentSelected('Filters')
383 Name: {app}\Filters\XML_html.flt; Type: Files; Check: not IsComponentSelected('Filters')
384 Name: {app}\Filters\FileFilter.tmpl; Type: Files; Check: not IsComponentSelected('Filters')
385 Name: {app}\Filters; Type: DirIfEmpty; Check: not IsComponentSelected('Filters')
390 ;The always uninstall flag tells the uninstaller to remove the folder if it's empty regardless of whether or not it existed prior to the installation
391 Name: {app}; Flags: uninsalwaysuninstall
395 ; Select the proper executable for different Windows versions
396 ; For Windows 05/98/ME ANSI executable is installed (WinMerge.exe)
397 ; For Windows NT4/2000/XP/2003/Vista the Unicode executable is installed (WinMergeU.exe)
398 Source: ..\..\Build\MergeUnicodeRelease\WinMergeU.exe; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Components: Core
400 ; List of installed files
401 Source: ..\..\Docs\Users\Files.txt; DestDir: {app}; Flags: promptifolder; Components: Core
403 ; Microsoft runtime libraries (C-runtime, MFC)
404 Source: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\redist\x86\Microsoft.VC100.CRT\msvcr100.dll"; DestDir: "{app}"; Components: Core
\r
405 Source: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\redist\x86\Microsoft.VC100.CRT\msvcp100.dll"; DestDir: "{app}"; Components: Core
\r
407 Source: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\redist\x86\Microsoft.VC100.MFC\mfc100u.dll"; DestDir: "{app}"; Components: Core
\r
408 Source: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\redist\x86\Microsoft.VC100.MFC\mfcm100u.dll"; DestDir: "{app}"; Components: Core
\r
409 Source: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\vc\redist\x86\Microsoft.VC100.MFCLOC\mfc100jpn.dll"; DestDir: "{app}"; Components: Core
\r
412 Source: ..\..\Build\MergeUnicodeRelease\ShellExtensionU.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder; MinVersion: 0, 4; Check: not IsWin64
413 ; 64-bit version of ShellExtension
414 Source: ..\..\Build\X64\ShellExtensionUnicode Release MinDependency\ShellExtensionX64.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder 64bit; MinVersion: 0,5.01.2600; Check: IsWin64
\r
416 ;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version
417 Source: ..\..\Build\MergeUnicodeRelease\Merge7z465U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('465')
418 Source: ..\..\Build\MergeUnicodeRelease\Merge7z457U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('457')
419 Source: ..\..\Build\MergeUnicodeRelease\Merge7z442U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('442')
420 Source: ..\..\Build\MergeUnicodeRelease\Merge7z432U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('432')
421 Source: ..\..\Build\MergeUnicodeRelease\Merge7z431U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('431')
422 Source: ..\..\Build\MergeUnicodeRelease\Merge7z423U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('423')
423 Source: ..\..\Build\MergeUnicodeRelease\Merge7z420U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('420')
424 Source: ..\..\Build\MergeUnicodeRelease\Merge7z313U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('313')
425 Source: ..\..\Build\MergeUnicodeRelease\Merge7z312U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('312')
426 Source: ..\..\Build\MergeUnicodeRelease\Merge7z311U.dll; DestDir: {app}; Flags: promptifolder; MinVersion: 0, 4; Check: Install7ZipDll('311')
429 Source: ..\..\Build\expat\lib\Release\libexpat.dll; DestDir: {app}; Flags: promptifolder; Components: Core
432 Source: ..\..\Build\pcre\MinSizeRel\pcre.dll; DestDir: {app}; Flags: promptifolder; Components: Core
434 ; MergeLang.dll - translation helper dll
435 Source: ..\..\Build\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core
438 Source: ..\..\Translations\WinMerge\Brazilian.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp
439 Source: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt; DestDir: {app}\Docs; Components: Languages\PortugueseBrazilian
440 Source: ..\..\Translations\WinMerge\Bulgarian.po; DestDir: {app}\Languages; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp
441 Source: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt; DestDir: {app}\Docs; Components: Languages\Bulgarian
442 Source: ..\..\Translations\WinMerge\Catalan.po; DestDir: {app}\Languages; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp
443 Source: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt; DestDir: {app}\Docs; Components: Languages\Catalan
444 Source: ..\..\Translations\WinMerge\ChineseSimplified.po; DestDir: {app}\Languages; Components: Languages\Chinese_Simplified; Flags: ignoreversion comparetimestamp
445 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Simplified
446 Source: ..\..\Translations\WinMerge\ChineseTraditional.po; DestDir: {app}\Languages; Components: Languages\Chinese_Traditional; Flags: ignoreversion comparetimestamp
447 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Traditional
448 Source: ..\..\Translations\WinMerge\Croatian.po; DestDir: {app}\Languages; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp
449 Source: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt; DestDir: {app}\Docs; Components: Languages\Croatian
450 Source: ..\..\Translations\WinMerge\Czech.po; DestDir: {app}\Languages; Components: Languages\Czech; Flags: ignoreversion comparetimestamp
451 Source: ..\..\Translations\WinMerge\Danish.po; DestDir: {app}\Languages; Components: Languages\Danish; Flags: ignoreversion comparetimestamp
452 Source: ..\..\Translations\WinMerge\Dutch.po; DestDir: {app}\Languages; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp
453 Source: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt; DestDir: {app}\Docs; Components: Languages\Dutch
454 Source: ..\..\Translations\WinMerge\French.po; DestDir: {app}\Languages; Components: Languages\French; Flags: ignoreversion comparetimestamp
455 Source: ..\..\Translations\Docs\Readme\ReadMe-French.txt; DestDir: {app}\Docs; Components: Languages\French
456 Source: ..\..\Translations\WinMerge\Galician.po; DestDir: {app}\Languages; Components: Languages\Galician; Flags: ignoreversion comparetimestamp
457 Source: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt; DestDir: {app}\Docs; Components: Languages\Galician
458 Source: ..\..\Translations\WinMerge\German.po; DestDir: {app}\Languages; Components: Languages\German; Flags: ignoreversion comparetimestamp
459 Source: ..\..\Translations\WinMerge\Greek.po; DestDir: {app}\Languages; Components: Languages\Greek; Flags: ignoreversion comparetimestamp
460 Source: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt; DestDir: {app}\Docs; Components: Languages\Greek
461 Source: ..\..\Translations\WinMerge\Hungarian.po; DestDir: {app}\Languages; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp
462 Source: ..\..\Translations\WinMerge\Italian.po; DestDir: {app}\Languages; Components: Languages\Italian; Flags: ignoreversion comparetimestamp
463 Source: ..\..\Translations\WinMerge\Japanese.po; DestDir: {app}\Languages; Components: Languages\Japanese; Flags: ignoreversion
464 Source: ..\..\Build\Docs\ReadMe-Japanese.txt; DestDir: {app}\Docs; Components: Languages\Japanese
465 Source: ..\..\Build\Manual\htmlhelp\WinMerge_ja.chm; DestDir: {app}\Docs; Components: Languages\Japanese
466 Source: ..\..\Translations\WinMerge\Korean.po; DestDir: {app}\Languages; Components: Languages\Korean; Flags: ignoreversion comparetimestamp
467 Source: ..\..\Translations\WinMerge\Norwegian.po; DestDir: {app}\Languages; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp
468 Source: ..\..\Translations\WinMerge\Persian.po; DestDir: {app}\Languages; Components: Languages\Persian; Flags: ignoreversion comparetimestamp
469 Source: ..\..\Translations\WinMerge\Polish.po; DestDir: {app}\Languages; Components: Languages\Polish; Flags: ignoreversion comparetimestamp
470 Source: ..\..\Translations\WinMerge\Portuguese.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp
471 Source: ..\..\Translations\WinMerge\Romanian.po; DestDir: {app}\Languages; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp
472 Source: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt; DestDir: {app}\Docs; Components: Languages\Romanian
473 Source: ..\..\Translations\WinMerge\Russian.po; DestDir: {app}\Languages; Components: Languages\Russian; Flags: ignoreversion comparetimestamp
474 Source: ..\..\Translations\WinMerge\Serbian.po; DestDir: {app}\Languages; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp
475 Source: ..\..\Translations\WinMerge\Slovak.po; DestDir: {app}\Languages; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp
476 Source: ..\..\Translations\WinMerge\Slovenian.po; DestDir: {app}\Languages; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp
477 Source: ..\..\Translations\WinMerge\Spanish.po; DestDir: {app}\Languages; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp
478 Source: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt; DestDir: {app}\Docs; Components: Languages\Spanish
479 Source: ..\..\Translations\WinMerge\Swedish.po; DestDir: {app}\Languages; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp
480 Source: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt; DestDir: {app}\Docs; Components: Languages\Swedish
481 Source: ..\..\Translations\WinMerge\Turkish.po; DestDir: {app}\Languages; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp
482 Source: ..\..\Translations\WinMerge\Ukrainian.po; DestDir: {app}\Languages; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp
483 Source: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt; DestDir: {app}\Docs; Components: Languages\Ukrainian
485 Source: ..\..\Build\Filters\*.flt; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters
486 Source: ..\..\Build\Filters\FileFilter.tmpl; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters
489 Source: ..\..\Build\Docs\ReadMe.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core
490 Source: ..\..\Build\Docs\Contributors.txt; DestDir: {app}; Flags: comparetimestamp ignoreversion promptifolder; Components: Core
491 Source: ..\..\Docs\Users\ReleaseNotes.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core
492 Source: ..\..\Build\Docs\ChangeLog.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core
\r
493 Source: ..\..\Build\Manual\htmlhelp\WinMerge.chm; DestDir: {app}\Docs\; Flags: overwritereadonly uninsremovereadonly; Components: Core
496 ;Please note IgnoreVersion and CompareTimeStamp are to instruct the installer to not not check for version info and go straight to comparing modification dates
497 Source: ..\..\Plugins\dlls\editor addin.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins
498 Source: ..\..\Plugins\dlls\insert datetime.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins
499 Source: ..\..\Plugins\dlls\CompareMSExcelFiles.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
500 Source: ..\..\Plugins\dlls\CompareMSWordFiles.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
501 Source: ..\..\Plugins\dlls\IgnoreColumns.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
502 Source: ..\..\Plugins\dlls\IgnoreCommentsC.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
503 Source: ..\..\Plugins\dlls\IgnoreFieldsComma.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
504 Source: ..\..\Plugins\dlls\IgnoreFieldsTab.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
505 Source: ..\..\Plugins\dlls\IgnoreLeadingLineNumbers.dll; DestDir: {app}\MergePlugins; Flags: promptifolder; Components: Plugins
509 Name: {group}\WinMerge; Filename: {app}\{code:ExeName}
510 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe.txt; IconFileName: {win}\NOTEPAD.EXE
511 Name: {group}\{cm:UsersGuide}; Filename: {app}\Docs\WinMerge.chm
512 Name: {group}\{cm:UninstallProgram,WinMerge}; Filename: {uninstallexe}
513 Name: {group}\{cm:ProgramOnTheWeb,WinMerge}; Filename: http://winmerge.org/
515 ;Link to translated ReadMe in Start Menu
516 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Brazilian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: PortugueseBrazilian
517 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Bulgarian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Bulgarian
518 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Catalan.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Catalan
519 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseSimplified.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Simplified
520 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseTraditional.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Traditional
521 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Croatian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Croatian
522 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Dutch.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Dutch
523 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-French.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: French
524 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Galician.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Galician
525 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Greek.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Greek
526 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Japanese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Japanese
527 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Romanian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Romanian
528 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Spanish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Spanish
529 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Swedish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Swedish
530 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Ukrainian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Ukrainian
533 Name: {commondesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon
536 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon
539 Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty
540 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey
541 Root: HKLM; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty
542 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey
544 ;Add Project file extension (.WinMerge) to known extensions and
545 ;set WinMerge to open those files
546 ;set Notepad to edit project files
547 Root: HKCR; Subkey: .WinMerge; ValueType: String; ValueData: WinMerge.Project.File; Flags: uninsdeletekey
548 Root: HKCR; Subkey: WinMerge.Project.File; ValueType: String; ValueData: {cm:ProjectFileDesc}; Flags: uninsdeletekey
549 Root: HKCR; Subkey: WinMerge.Project.File\shell\open\command; ValueType: String; ValueData: """{app}\{code:ExeName}"" ""%1"""; Flags: uninsdeletekey
550 Root: HKCR; Subkey: WinMerge.Project.File\shell\edit\command; ValueType: String; ValueData: """NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletekey
551 Root: HKCR; Subkey: WinMerge.Project.File\DefaultIcon; ValueType: String; ValueData: """{app}\{code:ExeName}"",1"; Flags: uninsdeletekey
553 ; delete obsolete values
554 ;In Inno Setup Version 4.18 ValueData couldn't be null and compile,
555 ;if this is fixed in a later version feel free to remove the parameter
556 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue
557 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue
559 ;This removes the key that remembers which messageboxes to hide from the user, this is because the text of that message
560 ;can change and make it more clear as to the user why they might want to pay attention to a particular dialog and also
561 ;because a particular message might be added or removed and a new message might occupy a previous message's ID number
562 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge\MessageBoxes; ValueType: none; Flags: deletekey
564 Root: HKCR; SubKey: Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror
565 Root: HKCR; SubKey: Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror
567 ;Adds "Start Menu" --> "Run" Support for WinMerge
568 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey
569 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey
570 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}
571 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}
573 ;Registry Keys for use by ShellExtension.dll
574 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\{code:ExeName}
576 ;Enables or disables the Context Menu preference based on what the user selects during install
577 ;Initially the Context menu is explicitly disabled:
578 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0;
580 ;If the user chose to use the context menu then we re-enable it. This is necessary so it'll turn on and off not just on.
581 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension
582 Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: {code:ShellMenuEnabled}
584 ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application
585 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS
586 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS
587 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS
588 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS
590 ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way
591 ;if it is installed at a later date this will automatically support it)
592 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS
593 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS
594 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS
595 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS
597 ;Set WinMerge as TortoiseSVN diff tool
598 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN
600 ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in
601 ;(unless the user already has a startup language specified)
602 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000402; Flags: deletevalue; Languages: Bulgarian
603 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000403; Flags: deletevalue; Languages: Catalan
604 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000804; Flags: deletevalue; Languages: Chinese_Simplified
605 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000404; Flags: deletevalue; Languages: Chinese_Traditional
606 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041a; Flags: deletevalue; Languages: Croatian
607 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000405; Flags: deletevalue; Languages: Czech
608 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000406; Flags: deletevalue; Languages: Danish
609 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000413; Flags: deletevalue; Languages: Dutch
610 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000409; Flags: deletevalue; Languages: English
611 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040c; Flags: deletevalue; Languages: French
612 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000407; Flags: deletevalue; Languages: German
613 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000408; Flags: deletevalue; Languages: Greek
614 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000410; Flags: deletevalue; Languages: Italian
615 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000411; Flags: deletevalue; Languages: Japanese
616 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000412; Flags: deletevalue; Languages: Korean
617 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000414; Flags: deletevalue; Languages: Norwegian
618 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000429; Flags: deletevalue; Languages: Persian
619 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000415; Flags: deletevalue; Languages: Polish
620 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000816; Flags: deletevalue; Languages: Portuguese
621 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000416; Flags: deletevalue; Languages: PortugueseBrazilian
622 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000418; Flags: deletevalue; Languages: Romanian
623 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000419; Flags: deletevalue; Languages: Russian
624 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c1a; Flags: deletevalue; Languages: Serbian
625 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041b; Flags: deletevalue; Languages: Slovak
626 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c0a; Flags: deletevalue; Languages: Spanish
627 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041D; Flags: deletevalue; Languages: Swedish
628 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041f; Flags: deletevalue; Languages: Turkish
629 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000422; Flags: deletevalue; Languages: Ukrainian
633 ;This will no longer appear unless the user chose to make a start menu group in the first place
634 Filename: {win}\Explorer.exe; Description: {cm:ViewStartMenuFolder}; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent unchecked; Check: GroupCreated
636 Filename: {app}\{code:ExeName}; Description: {cm:LaunchProgram, WinMerge}; Flags: nowait postinstall skipifsilent runmaximized
640 ;Remove 7-zip integration dlls possibly installed (by hand or using separate installer)
641 Name: {app}\Merge7z*.dll; Type: files
642 Name: {app}\7zip_pad.xml; Type: files
643 Name: {app}\Codecs; Type: filesandordirs
644 Name: {app}\Formats; Type: filesandordirs
645 Name: {app}\Lang; Type: filesandordirs
647 Name: {group}; Type: dirifempty
648 Name: {app}; Type: dirifempty
653 {Stores the version of 7-Zip Installed}
654 int7Zip_Version: Integer;
656 {Determines two things whether or not ComCtrl is needed and whether or not we've already checked}
657 intComCtlNeeded: Integer;
659 {Determines whether or not the user chose to create a start menu}
660 Function GroupCreated(): boolean;
662 {Stores the path of the start menu group Inno Setup may have created}
663 strGroup_Path: string;
665 {Saves the path that Inno Setup intended to create the start menu group at}
666 strGroup_Path := ExpandConstant('{group}');
668 {If the start menu path isn't blank then..}
669 if strGroup_Path <> '' Then
671 {If the user choose to create the start menu then this folder will exist.
672 If the folder exists then GroupCreated = True otherwise it does not.}
673 Result := DirExists(strGroup_Path)
676 {Since the start menu path is null, we know that the user chose not to create a
677 start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}
682 If DirExists(strGroup_Path) = True Then
683 Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)
685 Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }
689 {Returns the appropriate name of the .EXE being installed}
690 Function ExeName(Unused: string): string;
693 If UsingWinNT() = True Then
694 Result := 'WinMergeU.exe'
696 Result := 'WinMerge.exe';
699 Function FixVersion(strInput: string): string;
700 {Returns a version with four segments A.B.C.D}
702 {Stores the number of periods found within the version string}
708 {Generates the string to be returned to the user}
712 {Creates a copy of the input string before we tear it apart}
713 strVersion := strInput;
715 {Until strInput is empty do..}
716 While Length(strInput) > 0 do
718 {if the first character of the input string is a period then}
719 If Copy(strInput, 1, 1) = '.' Then
721 {Incriment the number of periods found}
722 intPeriods := intPeriods + 1;
724 {Remove the first character from the Input string}
725 strInput := Copy(strINput, 2, length(strINput));
728 {For every period shy of 3 do..}
729 For i := 1 to 3 - intperiods do
731 {Add a '.0' to the version string}
732 strVersion := strVersion + '.0';
734 {Returns the Version string with the correct number of segments}
735 Result := strVersion;
739 Function RemoveLeadingZeros(strInput: string): string;
740 {Removes the leading zeros if any from a numeric string}
743 {While the first character of the string is a zero}
744 While Copy(strInput, 1, 1) = '0' Do
747 {Removes one leading zero from the input string}
748 strInput := Copy(strInput, 2, Length(strINput));
751 {Returns the formatted string}
757 {Returns whether or not the version string detected is meets the version number requirement}
758 Function VersionAtLeast(strVersion_Installed: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;
761 {Stores the Major of the Version installed (X.0.0.0)}
762 intMajor_Installed: Integer;
764 {Stores the Minor of the Version installed (1.X.0.0)}
765 intMinor_Installed: Integer;
767 {Stores the Revision of the Version installed (1.0.X.0)}
768 intRevision_Installed: Integer;
770 {Stores the Revision of the Version installed (1.0.0.X)}
771 intBuild_Installed: Integer;
773 {Stores the last valid character of a particular segment (Major, Minor, Revision) of the Version string}
778 Msgbox('The version installed is ' + strVersion_Installed + ' and the required version is ' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild), mbINformation, mb_OK)
781 {Makes sure the version string contains four numberic segments 5.2 ---> 5.2.0.0}
782 strVersion_Installed := FixVersion(strVersion_Installed);
784 {If the version number is empty then quit the function}
785 if strVersion_Installed = '' Then
789 {Stops analyzing the version installed and returns that the version installed was inadequate}
793 {Starts detecting the Major value of the Version Installed}
795 {Sets the end position equal to one character before the first period in the version number}
796 intEnd_Pos := Pos('.', strVersion_Installed) -1
798 {Sets the major version equal to all character before the first period }
799 intMajor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);
802 msgbox('The Major version installed is ' + IntToStr(intMajor_installed) + ' and the required Major is ' + IntToStr(intMajor) + '.', mbInformation, MB_OK)
805 {If the Major Version Installed is greater than the required value then...}
806 if intMajor_Installed > intMajor Then
808 {Returns that the version number was adequate, since it actually exceeded the requirement}
812 msgbox(IntToStr(intMajor_installed) + ' > ' + IntToStr(intMajor), mbInformation, MB_OK)
815 {Stops analyzing the version number since we already know it met the requirement}
819 {If the Major version installed is less than the requirement then...}
820 If intMajor_Installed < intMajor Then
823 msgbox(IntToStr(intMajor_installed) + ' < ' + IntToStr(intMajor), mbInformation, MB_OK)
828 {Stops analyzing the version number since we already know it's inadequate and returns False (inadequate)}
833 {Starts detecting the Minor version of the Version Installed}
835 {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Major Version)}
836 strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
838 {Sets the end position equal to one character before the first period in the version number}
839 intEnd_Pos := Pos('.', strVersion_Installed) -1
841 {Sets the Minor version equal to all character before the first period }
842 intMinor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0)
845 msgbox('The Minor version installed is ' + IntToStr(intMinor_installed) + ' and the required Minor is ' + IntToStr(intMinor) + '.', mbInformation, MB_OK)
848 {If the Minor Version Installed is greater than the required value then...}
849 If intMinor_Installed > intMinor Then
851 {Returns that the version number was adequate}
854 {Stops further analyzation of the version number}
858 {If the minor installed is less than what was required}
859 If intMinor_Installed < intMinor Then
863 {Returns that the version installed did not meet the required value and stops analyzing the version number}
868 {Starts Detecting the Revision of the Version Installed}
870 {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Minor Version)}
871 strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
873 {Sets the last character of the Revision to last character before the first period}
874 intEnd_Pos := Pos('.', strVersion_Installed) -1
876 {Sets the Revision Installed equal to everything before the first period}
877 intRevision_Installed := strToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);
880 msgbox('The Revision version installed is ' + IntToStr(intRevision_installed) + ' and the required Revision is ' + IntToStr(intRevision) + '.', mbInformation, MB_OK)
883 {If the Revision Installed is greater than the required value then...}
884 If intRevision_Installed > intRevision Then
886 {Return that the version installed was adequate}
889 {Stops further analyzation of the version number}
893 {If the revision installed did not meet the requirement then...}
894 If intRevision_Installed < intRevision Then
898 {Return that the version number failed to meet the requirement and stops further analyzation of the version number}
902 {Start Detection the Build Installed}
904 {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Revision) leaving behind only the build number}
905 strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
907 {Set the build installed = to what's left of the strVersion_Installed text}
908 intBuild_installed := strToIntDef(RemoveLeadingZeros(strVersion_Installed), 0);
911 msgbox('The Build version installed is ' + IntToStr(intBuild_installed) + ' and the required Build is ' + IntToStr(intBuild) + '.', mbInformation, MB_OK)
914 {If the build installed is greater than or equal to the requirement then...}
915 if intBuild_installed >= intBuild Then
917 {Report that the version installed was adequate}
921 {Reports the inadequacy of the version installed and seases processing }
925 {Returns whether or not the version of particular file is at least equal to requested value}
926 Function FileVersionAtLeast(strFile_Path: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;
928 {Stores the version of the file to be compared}
931 {Gets the version number of the specified file}
932 GetVersionNumbersString(strFile_Path, strVersion)
934 {File Version at least is the result of the VersionAtLeast Determination}
935 Result := VersionAtLeast(strVersion, intMajor, intMinor, intRevision, intBuild);
938 {Debug: If you'd like to debug with a messagebox then un rem this
939 If Result = True then
941 Msgbox('The version of ' + strFile_path + ' required is "' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild) + '". The version found was "' + strVersion + '. The version detected met the required value.', mbInformation, MB_OK)
943 Msgbox('The version of ' + strFile_path + ' required is "' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild) + '". The version found was "' + strVersion + '. The version detected did not meet the required value.', mbInformation, MB_OK);
947 function Install7ZipDll(strDLL_Version: string): Boolean;
949 {Stores the file path of the 7-Zip File Manager Program}
950 str7Zip_Path: String;
952 {Stores the version of 7-Zip Installed}
953 str7Zip_Version: String;
955 {Stores the DLL's Version Function Input Parameter in integer format}
956 intDLL_Version: Integer;
959 {If the actual version of 7-Zip Installed hasn't been determined yet then...}
960 If int7Zip_Version = 0 Then
962 {Detects the install location of 7-Zip from the registry, if it's installed}
963 RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe', '', str7Zip_Path)
965 {If there is 7-Zip information in the registry then...}
966 If length(str7Zip_Path) > 0 Then
968 {If the 7zFM.exe file exists then...}
969 If FileExists(str7Zip_Path) = True Then
971 {Detects the version of the 7-Zip Installed}
972 GetVersionNumbersString(str7Zip_Path, str7Zip_Version)
973 {If the version of 7-Zip Installed is at least 3.11 Then...}
974 If VersionAtLeast(str7Zip_Version, 3, 11, 0, 0) = True Then
976 {If the user has 3.12 or higher installed then...}
977 If VersionAtLeast(str7Zip_Version, 3, 12, 0, 0) = True Then
979 {If the user has 3.13 or higher installed then...}
980 If VersionAtLeast(str7Zip_Version, 3, 13, 0, 0) = True Then
982 {If the user has 4.20 or higher installed then...}
983 If VersionAtLeast(str7Zip_Version, 4, 20, 0, 0) = True Then
985 {If the user has 4.23 or higher installed then...}
986 If VersionAtLeast(str7Zip_Version, 4, 23, 0, 0) = True Then
988 {If the user has 4.31 or higher installed then...}
989 If VersionAtLeast(str7Zip_Version, 4, 31, 0, 0) = True Then
991 {If the user has 4.32 or higher installed then...}
992 If VersionAtLeast(str7Zip_Version, 4, 32, 0, 0) = True Then
994 {If the user has 4.32 or higher installed then...}
995 If VersionAtLeast(str7Zip_Version, 4, 42, 0, 0) = True Then
997 {If the user has 4.57 or higher installed then...}
998 If VersionAtLeast(str7Zip_Version, 4, 57, 0, 0) = True Then
1000 {If the user has 465 or higher installed then...}
1001 If VersionAtLeast(str7Zip_Version, 4, 65, 0, 0) = True Then
1002 {We record the version of 7-Zip installed as 4.42 regardless of whether or not it's actually 4.21, 4.22, etc..}
1003 int7Zip_Version := 465
1005 int7Zip_Version := 457
1008 {Since it was at least 4.42, but not 4.57 then it must be 4.42}
1009 int7Zip_Version := 442
1012 {Since it was at least 4.32, but not 4.42 then it must be 4.32}
1013 int7Zip_Version := 432
1016 {Since it was at least 4.31, but not 4.32 then it must be 4.31}
1017 int7Zip_Version := 431
1020 {Since it was at least 4.23, but not 4.31 then it must be 4.23}
1021 int7Zip_Version := 423
1024 {Since it was at least 4.20, but not 4.23 then it must be 4.20}
1025 int7Zip_Version := 420
1028 {Since it was at least 3.13, but not 4.20 then it must be 3.13}
1029 int7Zip_Version := 313
1032 {Since it was at least 3.12, but not 3.13 then it must be 3.12}
1033 int7Zip_Version := 312;
1036 {Since it was at least 3.11, but not 3.12 then it must be 3.11}
1037 int7Zip_Version := 311;
1041 {Records that the 7-Zip program didn't exist for the rest of the installation}
1042 int7Zip_Version := -1;
1045 {Records that the 7-Zip program wasn't installed for rest of the installation}
1046 int7Zip_Version := -1;
1049 {Converts the DLL Version String to an Integer for numeric evaluation}
1050 intDLL_Version := StrToInt(strDLL_Version);
1052 {If 7-Zip either wasn't installed or was of inadequate version then...}
1053 If int7Zip_Version = -1 Then
1055 {If the program is trying to determine if the 313 DLL should be installed then the answer is yes
1056 we install this, because it's the most recent version and if they were to install 7-zip this
1057 would be the version they'd want (since people generally install the latest and greatest)}
1058 if intDLL_Version = 313 Then
1061 {If the program is trying to install anything, but 313 on a system without 7-Zip
1062 then we disallow the installation of that DLL}
1067 {If the version of 7-Zip was sufficient then...}
1070 {if the version the program is trying to install matches the version installed on the clients system then...}
1071 If int7Zip_Version = intDLL_Version Then
1074 {If the program is trying to install the 31X DLL on a 31Y system then we won't allow the file to be copied...}
1080 If UsingWinNT = True Then
1082 If Result = True Then
1083 Msgbox('We''re are installing Merge7z' + strDLL_Version + 'U.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok)
1085 Msgbox('We''re aren''t installing Merge7z' + strDLL_Version + 'U.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok);
1091 If Result = True Then
1092 Msgbox('We''re are installing Merge7z' + strDLL_Version + '.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok)
1094 Msgbox('We''re aren''t installing Merge7z' + strDLL_Version + '.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok);
1100 {Determines whether or not TortoiseCVS is installed}
1101 Function TortoiseCVSInstalled(): boolean;
1103 {This absolutely must remain as \CustomIcons, because our application used to create some TortoiseCVS keys even if the application wasn't installed!}
1104 Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\CustomIcons') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\Icons');
1107 {Determines whether or not TortoiseSVN is installed}
1108 Function TortoiseSVNInstalled(): boolean;
1110 Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseSVN') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseSVN');
1113 Function OldGroup(): string;
1115 {Stores where in \All Users\Programs\ our start menu used to be located}
1116 RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1', 'Inno Setup: Icon Group', Result)
1119 Procedure DeletePreviousStartMenu();
1124 strShortcut: string;
1126 {Detects the previous start menu group's path, if any}
1127 strOld := OldGroup();
1129 {Detects the current start menu group's path, if any (not creating a group is a valid option)}
1130 strNew := ExpandConstant('{group}');
1132 {removes the start menu portion of the path from the group path making it match the format of strOld}
1133 StringChange(strNew, ExpandConstant('{commonprograms}\'), '')
1135 {if the user does have a previous start menu location then..}
1136 If strOld <> '' Then
1138 {If the current and previous start menu locations are different then...}
1139 If Uppercase(strOld) <> UpperCase(strNew) Then
1141 strMessage := ExpandConstant('{cm:DeletePreviousStartMenu}');
1142 strMessage := Format(strMessage, [strOld, strNew]);
1144 {Display a dialog asking the user if they'd like to delete the previous start menu group}
1145 {If they'd like to delete the previous start menu group then...}
1146 If Msgbox(strMessage, mbConfirmation, mb_YesNo) = mrYes Then
1148 strOld := ExpandConstant('{commonprograms}\') + strOld;
1149 {Remove old start menu}
1150 DelTree(strOld, True, True, True);
1156 {This event procedure is queed each time the user changes pages within the installer}
1157 Procedure CurPageChanged(CurPage: integer);
1159 {if the installer reaches the file copy page then...}
1160 If CurPage = wpInstalling Then
1161 {Delete the previous start menu group if the location has changed since the last install}
1162 DeletePreviousStartMenu;
1165 // Checks if context menu is already enabled for shell extension
1166 // If so, we won't overwrite its existing value in [Registry] section
1167 Function ShellMenuEnabled(Unused: string): string;
1169 ContextMenuEnabled: DWORD;
1171 ContextMenuEnabled := 0;
1172 RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'ContextMenuEnabled', ContextMenuEnabled);
1173 if IsTaskSelected('ShellExtension') then
1174 Result := inttostr(ContextMenuEnabled or 1)
1179 {Replace one occurrence of OldStr in Str with NewStr}
1180 Function ReplaceSubString(Src: string; OldStr: string; NewStr: string) : string;
1182 OldStrStartAt: Integer;
1185 OldStrStartAt := Pos(OldStr, Src);
1186 if OldStrStartAt > 0 then
1189 Delete(Src, OldStrStartAt, Length(OldStr));
1191 Insert(NewStr, Src, OldStrStartAt);
1196 {Returns WinMerge installed exeutable file name}
1197 Function WinMergeExeName(): string;
1202 Result := ExpandConstant('{app}\') + ExeName(Unused);
1205 {Returns ClearCase external tools configuration file name}
1206 Function ClearCaseMapFile(): string;
1208 if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Rational Software\', 'RSINSTALLDIR', Result) then
1210 Result := {pf} + '\Rational\';
1212 Result := Result + 'ClearCase\lib\mgrs\map';
1215 {Determines whether or not Rational ClearCase is installed}
1216 Function ClearCaseInstalled(): boolean;
1218 Result := FileExists(ClearCaseMapFile());
1221 {Intergrate WinMerge as ClearCase external diff tool}
1222 Procedure IntegrateClearCase(OldExe: String; NewExe: String);
1224 MapFile: TStringList;
1230 FileName := ClearCaseMapFile();
1231 {Create a backup file of the original file first time it gets modified}
1232 BakFile := FileName + '.original';
1233 if not FileExists(BakFile) then
1235 FileCopy(FileName, BakFile, True);
1237 MapFile := TStringList.Create();
1238 {Read the entire map file to a string list}
1239 MapFile.LoadFromFile(FileName);
1240 if MapFile.Count > 0 then
1242 for I := 0 to MapFile.Count do
1244 {Search for the 'text_file_delta xcompare ...' line}
1245 if (MapFile.Strings[I][1] <> ';') and (Pos('text_file_delta', MapFile.Strings[I]) > 0) and (Pos('xcompare', MapFile.Strings[I]) > 0) then
1247 {Replace old executable name with a new executable name}
1248 MapFile.Strings[I] := ReplaceSubString(MapFile.Strings[I], OldExe, NewExe);
1252 { Save the modified file. }
1253 MapFile.SaveToFile(FileName);
1257 // Add WinMerge to system path.
1258 // This requires certain order of things to work:
1259 // #1 ModPathDir function must be first (it gets called by others)
1260 // #2 include of modpath.iss so modpath code gets included
1261 // #3 CurStepChanged and CurUninstallStepChanged procedures as they call
1262 // ModPath (in modpath.iss)
1263 function ModPathDir(): TArrayOfString;
1265 Dir: TArrayOfString;
1267 setArrayLength(Dir, 1)
1268 Dir[0] := ExpandConstant('{app}');
1272 #include "modpath.iss"
1274 procedure CurStepChanged(CurStep: TSetupStep);
1276 if CurStep = ssPostInstall then
1278 if IsTaskSelected('modifypath') then
1280 if IsTaskSelected('ClearCase') then
1282 IntegrateClearCase('..\..\bin\cleardiffmrg.exe', WinMergeExeName());
1287 Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
1290 selectedTasks: AnsiString;
1292 appdir := ExpandConstant('{app}')
1293 if CurUninstallStep = usUninstall then begin
1294 if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then
1295 if Pos('modifypath', selectedTasks) > 0 then
1297 DeleteFile(appdir + '\uninsTasks.txt')
1300 if CurUninstallStep = usPostUninstall then
1302 if ClearCaseInstalled() then
1303 IntegrateClearCase(WinMergeExeName(), '..\..\bin\cleardiffmrg.exe');