OSDN Git Service

Merge remote-tracking branch 'upstream/master' into jp
[winmerge-jp/winmerge-jp.git] / Installer / InnoSetup / WinMergeX64.is6.iss
1 ;           Programmed by:  Christian Blackburn, Christian List, Kimmo Varis,\r
2 ;                 Purpose:  The is the Inno Setup installation script for distributing our WinMerge application.\r
3 ; 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)\r
4 ;                           note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function\r
5 ;Directly Dependant Files:  Because this is an installer. It would be difficult to list and maintain each of the files referenced\r
6 ;                           throughout the script in the header.  If you search this plain text script for a particular file in our Subversio repository and it\r
7 ;                           doesn't appear then this script is not directly dependant on that file.\r
8 ;Compilation Instructions:  1.  Open this file in Inno Setup or ISTool\r
9 ;                           2.  Make sure Compression=LZMA/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during\r
10 ;                               development to speed up compilation, however at release we want the intaller to be as strong as possible.\r
11 ;                           3. Check all files are present:\r
12 ;                                   -From ISTool Click\r
13 ;                           4.  Compile the script: "Project" --> "Verify Files..."\r
14 ;                                   -From Inno Setup "Click "Build" --> "Compile"\r
15 ;                                   -From ISTool Click "Project" --> "Compile Setup"\r
16 ;                           5.  The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.\r
17 ;\r
18 ; Installer To Do List:\r
19 ; #  Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL (Use GetCurentFileName)\r
20 ; #  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\r
21 ; #  Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)\r
22 ; #  We need to unregister, and delete the ShellExtension Dll if the user doesn't want it, during installation\r
23 \r
24 ; #  Display integration options in gray rather than hiding them if the user doesn't have the application in question installed\r
25 ; #  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\r
26 ; #  Write code to detect "\Programs\WinMerge\WinMerge" type start menu installs\r
27 ;\r
28 ; Custom Installer Pages:\r
29 ; #  Bundle 7-Zip with WinMerge or provide on the fly download capability.\r
30 ; #  Allow users to set their working directory via a custom installer page\r
31 ;\r
32 ; Things that make the user's life easier:\r
33 ; #  Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)\r
34 ; #  Add "WinMerge is running would you like to close it now?" support with programmatic termination\r
35 ;     -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\r
36 ; #  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\r
37 ;    once the ShellExtension.dll file has been added or removed.\r
38 ;\r
39 ; Non-Essential Features:\r
40 ; #  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)\r
41 ; #  Using the registry set the order our icons appear within their group in the start menu.:\r
42 ;      1.  WinMerge\r
43 ;      2.  Read Me\r
44 ;      3.  Users's Guide\r
45 ; #  Create the ability to install to two start menu groups simultaneously\r
46 ;\r
47 ; Not yet possible (Limited by Inno Setup):\r
48 ; #  While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?\r
49 \r
50 #define ARCH "x64"\r
51 #define ShellExtension32bit "ShellExtensionU.dll"\r
52 #define ShellExtension64bit "ShellExtensionX64.dll"\r
53 #define AppVersion GetFileVersion(SourcePath + "\..\..\Build\" + ARCH + "\Release\WinMergeU.exe")\r
54 #define ShellExtensionVersion GetFileVersion(SourcePath + "..\..\Build\ShellExtension\" + ShellExtension64bit)\r
55 #define WinMergeContextMenuVersion GetFileVersion(SourcePath + "..\..\Build\ShellExtension\" + ARCH + "\WinMergeContextMenu.dll")\r
56 \r
57 [Setup]\r
58 AppName=WinMerge\r
59 AppVersion={#AppVersion}\r
60 AppVerName=WinMerge {#AppVersion} {#ARCH}\r
61 AppPublisher=Thingamahoochie Software\r
62 AppPublisherURL=https://winmergejp.bitbucket.io\r
63 AppSupportURL=https://winmergejp.bitbucket.io\r
64 AppUpdatesURL=https://winmergejp.bitbucket.io\r
65 WizardStyle=modern\r
66 UsePreviousPrivileges=no\r
67 PrivilegesRequiredOverridesAllowed=dialog\r
68 \r
69 ; Installer executable's version resource info\r
70 VersionInfoCompany=https://winmergejp.bitbucket.io\r
71 VersionInfoDescription=WinMerge Installer\r
72 VersionInfoVersion={#AppVersion}\r
73 \r
74 ;This is in case an older version of the installer happened to be\r
75 DirExistsWarning=no\r
76 \r
77 ;Tells the installer to only display a select language dialog if the an exact match wasn't found\r
78 ShowLanguageDialog=auto\r
79 \r
80 DefaultDirName={autopf}\WinMerge\r
81 DefaultGroupName=WinMerge\r
82 DisableStartupPrompt=true\r
83 AllowNoIcons=true\r
84 InfoBeforeFile=..\..\Docs\users\GPL.rtf\r
85 InfoAfterFile=..\..\Docs\users\ReadMe.txt\r
86 \r
87 OutputBaseFilename=WinMerge-{#AppVersion}-{#ARCH}-Setup\r
88 \r
89 ;This must be admin to install C++ Runtimes and shell extension\r
90 PrivilegesRequired=admin\r
91 \r
92 ;Windows Vista or later required\r
93 MinVersion=0,6.0\r
94 \r
95 UninstallDisplayIcon={app}\WinMergeU.exe\r
96 \r
97 ;Artwork References\r
98 WizardImageFile=Art\Large Logo.bmp\r
99 WizardSmallImageFile=Art\Small Logo.bmp\r
100 WizardImageStretch=true\r
101 \r
102 ;It is confusing, if Setup/Uninstall use the same icon like WinMerge!\r
103 ;SetupIconFile=..\..\src\res\Merge.ico\r
104 \r
105 ;Compression Parameters\r
106 ;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max\r
107 ;they also require 320 MB of memory for compression. If you're system has at least 256MB RAM then by all\r
108 ;means set it to ultra before compilation\r
109 Compression=lzma/ultra\r
110 InternalCompressLevel=ultra\r
111 SolidCompression=true\r
112 \r
113 ; Update file associations for shell (project files)\r
114 ChangesAssociations=true\r
115 ; Updates PATH\r
116 ChangesEnvironment=true\r
117 OutputDir=..\..\Build\r
118 AlwaysShowComponentsList=true\r
119 \r
120 ArchitecturesInstallIn64BitMode={#ARCH}\r
121 \r
122 #if GetEnv("SIGNBAT_PATH") != ""\r
123 SignTool=signbat $f\r
124 SignedUninstaller=yes\r
125 #endif\r
126 \r
127 [Languages]\r
128 ;Inno Setup's Native Language\r
129 Name: English; MessagesFile: compiler:Default.isl,..\..\Translations\InnoSetup\English.isl\r
130 \r
131 ;Localizations:\r
132 Name: Arabic; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Arabic.isl,..\..\Translations\InnoSetup\Arabic.isl\r
133 Name: Basque; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Basque.isl,..\..\Translations\InnoSetup\Basque.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt\r
134 Name: Bulgarian; MessagesFile: compiler:Languages\Bulgarian.isl,..\..\Translations\InnoSetup\Bulgarian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt\r
135 Name: Catalan; MessagesFile: compiler:Languages\Catalan.isl,..\..\Translations\InnoSetup\Catalan.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt\r
136 Name: ChineseSimplified; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\ChineseSimplified.isl,..\..\Translations\InnoSetup\ChineseSimplified.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt\r
137 Name: ChineseTraditional; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\ChineseTraditional.isl,..\..\Translations\InnoSetup\ChineseTraditional.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt\r
138 Name: Corsican; MessagesFile: compiler:Languages\Corsican.isl,..\..\Translations\InnoSetup\Corsican.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Corsican.txt\r
139 Name: Croatian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Croatian.isl,..\..\Translations\InnoSetup\Croatian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt\r
140 Name: Czech; MessagesFile: compiler:Languages\Czech.isl,..\..\Translations\InnoSetup\Czech.isl\r
141 Name: Danish; MessagesFile: compiler:Languages\Danish.isl,..\..\Translations\InnoSetup\Danish.isl\r
142 Name: Dutch; MessagesFile: compiler:Languages\Dutch.isl,..\..\Translations\InnoSetup\Dutch.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt\r
143 Name: Finnish; MessagesFile: compiler:Languages\Finnish.isl,..\..\Translations\InnoSetup\Finnish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt\r
144 Name: French; MessagesFile: compiler:Languages\French.isl,..\..\Translations\InnoSetup\French.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-French.txt\r
145 Name: Galician; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Galician.isl,..\..\Translations\InnoSetup\Galician.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt\r
146 Name: German; MessagesFile: compiler:Languages\German.isl,..\..\Translations\InnoSetup\German.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-German.txt\r
147 Name: Greek; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Greek.isl,..\..\Translations\InnoSetup\Greek.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt\r
148 Name: Hungarian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Hungarian.isl,..\..\Translations\InnoSetup\Hungarian.isl\r
149 Name: Italian; MessagesFile: compiler:Languages\Italian.isl,..\..\Translations\InnoSetup\Italian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Italian.txt\r
150 Name: Japanese; MessagesFile: compiler:Languages\Japanese.isl,..\..\Translations\InnoSetup\Japanese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt\r
151 Name: Korean; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Korean.isl,..\..\Translations\InnoSetup\Korean.isl\r
152 Name: Lithuanian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Lithuanian.isl,..\..\Translations\InnoSetup\Lithuanian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Lithuanian.txt\r
153 Name: Norwegian; MessagesFile: compiler:Languages\Norwegian.isl,..\..\Translations\InnoSetup\Norwegian.isl\r
154 Name: Persian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Farsi.isl,..\..\Translations\InnoSetup\Persian.isl\r
155 Name: Polish; MessagesFile: compiler:Languages\Polish.isl,..\..\Translations\InnoSetup\Polish.isl\r
156 Name: Portuguese; MessagesFile: compiler:Languages\Portuguese.isl,..\..\Translations\InnoSetup\Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt\r
157 Name: PortugueseBrazilian; MessagesFile: compiler:Languages\BrazilianPortuguese.isl,..\..\Translations\InnoSetup\Brazilian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt\r
158 Name: Romanian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Romanian.isl,..\..\Translations\InnoSetup\Romanian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt\r
159 Name: Russian; MessagesFile: compiler:Languages\Russian.isl,..\..\Translations\InnoSetup\Russian.isl\r
160 Name: Serbian; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\SerbianCyrillic.isl,..\..\Translations\InnoSetup\Serbian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt\r
161 Name: Sinhala; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Sinhala.islu,..\..\Translations\InnoSetup\Sinhala.islu\r
162 Name: Slovak; MessagesFile: compiler:Languages\Slovak.isl,..\..\Translations\InnoSetup\Slovak.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Slovak.txt\r
163 Name: Slovenian; MessagesFile: compiler:Languages\Slovenian.isl,..\..\Translations\InnoSetup\Slovenian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Slovenian.txt\r
164 Name: Spanish; MessagesFile: compiler:Languages\Spanish.isl,..\..\Translations\InnoSetup\Spanish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt\r
165 Name: Swedish; MessagesFile: ..\..\Translations\InnoSetup\Unbundled.is6\Swedish.isl,..\..\Translations\InnoSetup\Swedish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt\r
166 Name: Tamil; MessagesFile: compiler:Default.isl,..\..\Translations\InnoSetup\Tamil.islu; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Tamil.txt\r
167 Name: Turkish; MessagesFile: compiler:Languages\Turkish.isl,..\..\Translations\InnoSetup\Turkish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt\r
168 Name: Ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl,..\..\Translations\InnoSetup\Ukrainian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt\r
169 \r
170 \r
171 [Messages]\r
172 English.FinishedLabel=Setup has finished installing WinMerge on your computer.\r
173 English.SetupAppTitle=Setup - WinMerge {#AppVersion}\r
174 English.WizardInfoBefore=License Agreement\r
175 English.InfoBeforeLabel=GNU General Public License\r
176 \r
177 \r
178 [Types]\r
179 Name: typical; Description: {cm:TypicalInstallation}\r
180 Name: full; Description: {cm:FullInstallation}\r
181 Name: compact; Description: {cm:CompactInstallation}\r
182 Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom\r
183 \r
184 \r
185 [Components]\r
186 ; Executable, libraries, documentation\r
187 Name: Core; Description: {cm:AppCoreFiles}; Types: full custom typical compact; Flags: fixed\r
188 Name: ShellExtension32bit; Description: {cm:ShellExtension32bit}; Types: full typical\r
189 \r
190 Name: filters; Description: {cm:Filters}; Flags: disablenouninstallwarning; Types: full typical\r
191 Name: Plugins; Description: {cm:Plugins}; Flags: disablenouninstallwarning; Types: full typical\r
192 \r
193 ;Language components\r
194 Name: Languages; Description: {cm:Languages}; Flags: disablenouninstallwarning\r
195 Name: Languages\Arabic; Description: {cm:ArabicLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Arabic\r
196 Name: Languages\Arabic; Description: {cm:ArabicLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Arabic\r
197 \r
198 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Basque\r
199 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Basque\r
200 \r
201 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Bulgarian\r
202 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Bulgarian\r
203 \r
204 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Catalan\r
205 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Catalan\r
206 \r
207 Name: Languages\ChineseSimplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not ChineseSimplified\r
208 Name: Languages\ChineseSimplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: ChineseSimplified\r
209 \r
210 Name: Languages\ChineseTraditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not ChineseTraditional\r
211 Name: Languages\ChineseTraditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: ChineseTraditional\r
212 \r
213 Name: Languages\Corsican; Description: {cm:CorsicanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Corsican\r
214 Name: Languages\Corsican; Description: {cm:CorsicanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Corsican\r
215 \r
216 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Croatian\r
217 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Croatian\r
218 \r
219 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Czech\r
220 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Czech\r
221 \r
222 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Danish\r
223 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Danish\r
224 \r
225 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Dutch\r
226 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Dutch\r
227 \r
228 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Finnish\r
229 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Finnish\r
230 \r
231 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not French\r
232 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: French\r
233 \r
234 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Galician\r
235 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Galician\r
236 \r
237 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not German\r
238 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: German\r
239 \r
240 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Greek\r
241 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Greek\r
242 \r
243 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Hungarian\r
244 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Hungarian\r
245 \r
246 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Italian\r
247 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Italian\r
248 \r
249 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Japanese\r
250 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Japanese\r
251 \r
252 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Korean\r
253 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Korean\r
254 \r
255 Name: Languages\Lithuanian; Description: {cm:LithuanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Lithuanian\r
256 Name: Languages\Lithuanian; Description: {cm:LithuanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Lithuanian\r
257 \r
258 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Norwegian\r
259 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Norwegian\r
260 \r
261 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Persian\r
262 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Persian\r
263 \r
264 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Polish\r
265 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Polish\r
266 \r
267 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Portuguese\r
268 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Portuguese\r
269 \r
270 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not PortugueseBrazilian\r
271 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: PortugueseBrazilian\r
272 \r
273 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Romanian\r
274 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Romanian\r
275 \r
276 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Russian\r
277 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Russian\r
278 \r
279 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Serbian\r
280 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Serbian\r
281 \r
282 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Sinhala\r
283 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Sinhala\r
284 \r
285 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovak\r
286 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovak\r
287 \r
288 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovenian\r
289 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovenian\r
290 \r
291 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Spanish\r
292 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Spanish\r
293 \r
294 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Swedish\r
295 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Swedish\r
296 \r
297 Name: Languages\Tamil; Description: {cm:TamilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Tamil\r
298 Name: Languages\Tamil; Description: {cm:TamilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Tamil\r
299 \r
300 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Turkish\r
301 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Turkish\r
302 \r
303 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Ukrainian\r
304 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Ukrainian\r
305 \r
306 \r
307 [Tasks]\r
308 Name: ShellExtension; Description: {cm:ExplorerContextMenu}; GroupDescription: {cm:OptionalFeatures}\r
309 Name: modifypath; Description: {cm:AddToPath}; GroupDescription: {cm:OptionalFeatures}; Flags: unchecked\r
310 Name: TortoiseCVS; Description: {cm:IntegrateTortoiseCVS}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseCVSInstalled\r
311 Name: TortoiseGit; Description: {cm:IntegrateTortoiseGit}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseGitInstalled; MinVersion: 0,5.0.2195sp3\r
312 Name: TortoiseSVN; Description: {cm:IntegrateTortoiseSVN}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseSVNInstalled; MinVersion: 0,5.0.2195sp3\r
313 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked\r
314 Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0,6.1\r
315 \r
316 [InstallDelete]\r
317 ; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.\r
318 Type: files; Name: {app}\Diff.txt\r
319 \r
320 ;All of these files are removed so if the user upgrades their operating system or changes their language selections only the\r
321 ;necessary files will be left in the installation folder\r
322 ;Another reason these files might be strays is if a user extracted one of the experimental builds such as:\r
323 ;WinMerge.{#AppVersion}-exe.7z.\r
324 Name: {app}\WinMerge.exe; Type: files\r
325 Name: {app}\WinMergeU.exe; Type: files; MinVersion: 0, 4\r
326 \r
327 ;Remove manifest files as we don't need them in 2.6.2 / 2.7.1.1 or later\r
328 Name: {app}\WinMerge.exe.manifest; Type: files\r
329 Name: {app}\WinMergeU.exe.manifest; Type: files\r
330 \r
331 Name: {app}\Merge7z457.dll; Type: files\r
332 Name: {app}\Merge7z457U.dll; Type: files; MinVersion: 0, 4\r
333 \r
334 Name: {app}\Merge7z465.dll; Type: files\r
335 Name: {app}\Merge7z465U.dll; Type: files; MinVersion: 0, 4\r
336 \r
337 Name: {app}\Merge7z920.dll; Type: files\r
338 Name: {app}\Merge7z920U.dll; Type: files; MinVersion: 0, 4\r
339 \r
340 ;This won't work, because the file has to be unregistered, and explorer closed, first.\r
341 ;Name: {app}\ShellExtension.dll; Type: files; Check: TaskDisabled('ShellExtension')\r
342 \r
343 ; Remove existing .lang files - we don't need them anymore as we are\r
344 ; using PO files now.\r
345 Name: {app}\Languages\MergeBrazilian.lang; Type: files\r
346 Name: {app}\Languages\MergeBulgarian.lang; Type: files\r
347 Name: {app}\Languages\MergeCatalan.lang; Type: files\r
348 Name: {app}\Languages\MergeChineseSimplified.lang; Type: files\r
349 Name: {app}\Languages\MergeChineseTraditional.lang; Type: files\r
350 Name: {app}\Languages\MergeCzech.lang; Type: files\r
351 Name: {app}\Languages\MergeDanish.lang; Type: files\r
352 Name: {app}\Languages\MergeDutch.lang; Type: files\r
353 Name: {app}\Languages\MergeFrench.lang; Type: files\r
354 Name: {app}\Languages\MergeGerman.lang; Type: files\r
355 Name: {app}\Languages\MergeHungarian.lang; Type: files\r
356 Name: {app}\Languages\MergeItalian.lang; Type: files\r
357 Name: {app}\Languages\MergeJapanese.lang; Type: files\r
358 Name: {app}\Languages\MergeKorean.lang; Type: files\r
359 Name: {app}\Languages\MergeNorwegian.lang; Type: files\r
360 Name: {app}\Languages\MergePersian.lang; Type: files\r
361 Name: {app}\Languages\MergePolish.lang; Type: files\r
362 Name: {app}\Languages\MergePortuguese.lang; Type: files\r
363 Name: {app}\Languages\MergeSlovak.lang; Type: files\r
364 Name: {app}\Languages\MergeSpanish.lang; Type: files\r
365 Name: {app}\Languages\MergeRussian.lang; Type: files\r
366 Name: {app}\Languages\MergeSerbian.lang; Type: files\r
367 Name: {app}\Languages\MergeSwedish.lang; Type: files\r
368 Name: {app}\Languages\MergeTurkish.lang; Type: files\r
369 Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected('Plugins')\r
370 \r
371 ;Removes the user's guide icon if the user deselects the user's guide component.\r
372 Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs') and not WizardNoIcons\r
373 Name: {group}\{cm:ReadMe}.lnk; Type: files; Check: not WizardNoIcons\r
374 \r
375 ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed\r
376 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
377 Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
378 \r
379 ;This removes the desktop icon in case the user chooses not to install it after previously having it installed\r
380 Name: {autodesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
381 \r
382 ;Removes the Uninstall icon from the start menu...\r
383 Name: {group}\{cm:UninstallProgram,WinMerge}.lnk; Type: files; Check: not WizardNoIcons\r
384 Name: {group}\{cm:UninstallProgram,WinMerge}; Type: files; Check: not WizardNoIcons\r
385 \r
386 ;Remove ANSI executable link from start menu for NT-based Windows versions\r
387 ;This was installed earlier, but not anymore.\r
388 Name: {group}\WinMerge (ANSI).lnk; Type: files; MinVersion: 0,4; Check: not WizardNoIcons\r
389 \r
390 Name: {app}\Docs; Type: filesandordirs\r
391 \r
392 Name: {app}\MergePlugins\editor addin.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
393 Name: {app}\MergePlugins\insert datetime.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
394 Name: {app}\MergePlugins; Type: DirIfEmpty; Check: not IsComponentSelected('Plugins')\r
395 \r
396 Name: {app}\Filters\ADAMulti.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
397 Name: {app}\Filters\ASPNET.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
398 Name: {app}\Filters\CSharp_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
399 Name: {app}\Filters\Delphi.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
400 Name: {app}\Filters\MASM.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
401 Name: {app}\Filters\Merge_GnuC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
402 Name: {app}\Filters\Merge_VC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
403 Name: {app}\Filters\Merge_VB_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
404 Name: {app}\Filters\SourceControl.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
405 Name: {app}\Filters\Symbian.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
406 Name: {app}\Filters\XML_html.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
407 Name: {app}\Filters\FileFilter.tmpl; Type: Files; Check: not IsComponentSelected('Filters')\r
408 Name: {app}\Filters; Type: DirIfEmpty; Check: not IsComponentSelected('Filters')\r
409 \r
410 ;Remove old "List of installed files"...\r
411 Name: {app}\Files.txt; Type: files\r
412 \r
413 \r
414 [Dirs]\r
415 ;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\r
416 Name: {app}; Flags: uninsalwaysuninstall\r
417 \r
418 \r
419 [Files]\r
420 ; WinMerge itself\r
421 Source: ..\..\Build\{#ARCH}\Release\WinMergeU.exe; DestDir: {app}; Flags: promptifolder; Components: Core\r
422 ; Visual Elements\r
423 Source: ..\..\Build\{#ARCH}\Release\WinMergeU.VisualElementsManifest.xml; DestDir: {app}; Flags: promptifolder; Components: Core\r
424 Source: ..\..\Build\{#ARCH}\Release\LogoImages\*.png; DestDir: {app}\LogoImages; Flags: promptifolder; Components: Core\r
425 ; 32Bit Plugin Proxy\r
426 Source: ..\..\Plugins\WinMerge32BitPluginProxy\Release\WinMerge32BitPluginProxy.exe; DestDir: {app}; Flags: promptifolder; Components: Core\r
427 \r
428 ; Shell extension\r
429 Source: ..\..\Build\ShellExtension\{#ShellExtension32bit}; DestDir: {app}; Flags: uninsrestartdelete restartreplace promptifolder; \\r
430   MinVersion: 0, 4; Components: ShellExtension32bit; \\r
431   Check: not AreSourceAndDestinationOfShellExtensionSame(ExpandConstant('{app}\{#ShellExtension32bit}')) and \\r
432     RenameShellExtensionDLLIfExists(ExpandConstant('{app}\{#ShellExtension32bit}'))\r
433 ; 64-bit version of ShellExtension\r
434 Source: ..\..\Build\ShellExtension\{#ShellExtension64bit}; DestDir: {app}; Flags: uninsrestartdelete restartreplace promptifolder 64bit; \\r
435   MinVersion: 0,5.01.2600; \\r
436   Check: IsWin64 and not AreSourceAndDestinationOfShellExtensionSame(ExpandConstant('{app}\{#ShellExtension64bit}')) and \\r
437     RenameShellExtensionDLLIfExists(ExpandConstant('{app}\{#ShellExtension64bit}'))\r
438 Source: ..\..\Build\ShellExtension\{#ARCH}\WinMergeContextMenu.dll; DestDir: {app}; Flags: uninsrestartdelete restartreplace promptifolder 64bit; \\r
439   Check: IsWin64 and not AreSourceAndDestinationOfWinMergeContextMenuSame(ExpandConstant('{app}\WinMergeContextMenu.dll')) and \\r
440     UnregisterWinMergeContextMenuPackage and RenameShellExtensionDLLIfExists(ExpandConstant('{app}\WinMergeContextMenu.dll'))\r
441 Source: ..\..\Build\ShellExtension\WinMergeContextMenuPackage.msix; DestDir: {app}; Flags: uninsrestartdelete restartreplace promptifolder 64bit; \\r
442   Check: IsWin64 and not AreSourceAndDestinationOfWinMergeContextMenuSame(ExpandConstant('{app}\WinMergeContextMenuPackage.msix'))\r
443 \r
444 ; ArchiveSupport\r
445 ;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version\r
446 Source: ..\..\Build\{#ARCH}\Release\Merge7z\Merge7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder replacesameversion; MinVersion: 0, 4; Components: Core\r
447 Source: ..\..\Build\{#ARCH}\Release\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder replacesameversion; MinVersion: 0, 4; Components: Core\r
448 Source: ..\..\Build\{#ARCH}\Release\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: Core\r
449 Source: ..\..\Build\{#ARCH}\Release\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: Core\r
450 \r
451 ; Language files\r
452 Source: ..\..\Translations\WinMerge\Arabic.po; DestDir: {app}\Languages; Components: Languages\Arabic; Flags: ignoreversion comparetimestamp\r
453 Source: ..\..\Translations\ShellExtension\Arabic.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Arabic; Flags: ignoreversion comparetimestamp\r
454 Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp\r
455 Source: ..\..\Translations\ShellExtension\Basque.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Basque; Flags: ignoreversion comparetimestamp\r
456 Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque\r
457 Source: ..\..\Translations\WinMerge\Brazilian.po; DestDir: {app}\Languages; Components: Languages\PortugueseBrazilian; Flags: ignoreversion comparetimestamp\r
458 Source: ..\..\Translations\ShellExtension\Brazilian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\PortugueseBrazilian; Flags: ignoreversion comparetimestamp\r
459 Source: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt; DestDir: {app}\Docs; Components: Languages\PortugueseBrazilian\r
460 Source: ..\..\Translations\WinMerge\Bulgarian.po; DestDir: {app}\Languages; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp\r
461 Source: ..\..\Translations\ShellExtension\Bulgarian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp\r
462 Source: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt; DestDir: {app}\Docs; Components: Languages\Bulgarian\r
463 Source: ..\..\Translations\WinMerge\Catalan.po; DestDir: {app}\Languages; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp\r
464 Source: ..\..\Translations\ShellExtension\Catalan.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp\r
465 Source: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt; DestDir: {app}\Docs; Components: Languages\Catalan\r
466 Source: ..\..\Translations\WinMerge\ChineseSimplified.po; DestDir: {app}\Languages; Components: Languages\ChineseSimplified; Flags: ignoreversion comparetimestamp\r
467 Source: ..\..\Translations\ShellExtension\ChineseSimplified.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\ChineseSimplified; Flags: ignoreversion comparetimestamp\r
468 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt; DestDir: {app}\Docs; Components: Languages\ChineseSimplified\r
469 Source: ..\..\Translations\WinMerge\ChineseTraditional.po; DestDir: {app}\Languages; Components: Languages\ChineseTraditional; Flags: ignoreversion comparetimestamp\r
470 Source: ..\..\Translations\ShellExtension\ChineseTraditional.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\ChineseTraditional; Flags: ignoreversion comparetimestamp\r
471 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt; DestDir: {app}\Docs; Components: Languages\ChineseTraditional\r
472 Source: ..\..\Translations\WinMerge\Corsican.po; DestDir: {app}\Languages; Components: Languages\Corsican; Flags: ignoreversion comparetimestamp\r
473 Source: ..\..\Translations\ShellExtension\Corsican.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Corsican; Flags: ignoreversion comparetimestamp\r
474 Source: ..\..\Translations\Docs\Readme\ReadMe-Corsican.txt; DestDir: {app}\Docs; Components: Languages\Corsican\r
475 Source: ..\..\Translations\WinMerge\Croatian.po; DestDir: {app}\Languages; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp\r
476 Source: ..\..\Translations\ShellExtension\Croatian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp\r
477 Source: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt; DestDir: {app}\Docs; Components: Languages\Croatian\r
478 Source: ..\..\Translations\WinMerge\Czech.po; DestDir: {app}\Languages; Components: Languages\Czech; Flags: ignoreversion comparetimestamp\r
479 Source: ..\..\Translations\ShellExtension\Czech.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Czech; Flags: ignoreversion comparetimestamp\r
480 Source: ..\..\Translations\WinMerge\Danish.po; DestDir: {app}\Languages; Components: Languages\Danish; Flags: ignoreversion comparetimestamp\r
481 Source: ..\..\Translations\ShellExtension\Danish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Danish; Flags: ignoreversion comparetimestamp\r
482 Source: ..\..\Translations\WinMerge\Dutch.po; DestDir: {app}\Languages; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp\r
483 Source: ..\..\Translations\ShellExtension\Dutch.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp\r
484 Source: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt; DestDir: {app}\Docs; Components: Languages\Dutch\r
485 Source: ..\..\Translations\WinMerge\Finnish.po; DestDir: {app}\Languages; Components: Languages\Finnish; Flags: ignoreversion comparetimestamp\r
486 Source: ..\..\Translations\ShellExtension\Finnish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Finnish; Flags: ignoreversion comparetimestamp\r
487 Source: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt; DestDir: {app}\Docs; Components: Languages\Finnish\r
488 Source: ..\..\Translations\WinMerge\French.po; DestDir: {app}\Languages; Components: Languages\French; Flags: ignoreversion comparetimestamp\r
489 Source: ..\..\Translations\ShellExtension\French.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\French; Flags: ignoreversion comparetimestamp\r
490 Source: ..\..\Translations\Docs\Readme\ReadMe-French.txt; DestDir: {app}\Docs; Components: Languages\French\r
491 Source: ..\..\Translations\WinMerge\Galician.po; DestDir: {app}\Languages; Components: Languages\Galician; Flags: ignoreversion comparetimestamp\r
492 Source: ..\..\Translations\ShellExtension\Galician.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Galician; Flags: ignoreversion comparetimestamp\r
493 Source: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt; DestDir: {app}\Docs; Components: Languages\Galician\r
494 Source: ..\..\Translations\WinMerge\German.po; DestDir: {app}\Languages; Components: Languages\German; Flags: ignoreversion comparetimestamp\r
495 Source: ..\..\Translations\ShellExtension\German.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\German; Flags: ignoreversion comparetimestamp\r
496 Source: ..\..\Translations\Docs\Readme\ReadMe-German.txt; DestDir: {app}\Docs; Components: Languages\German\r
497 Source: ..\..\Translations\WinMerge\Greek.po; DestDir: {app}\Languages; Components: Languages\Greek; Flags: ignoreversion comparetimestamp\r
498 Source: ..\..\Translations\ShellExtension\Greek.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Greek; Flags: ignoreversion comparetimestamp\r
499 Source: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt; DestDir: {app}\Docs; Components: Languages\Greek\r
500 Source: ..\..\Translations\WinMerge\Hungarian.po; DestDir: {app}\Languages; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp\r
501 Source: ..\..\Translations\ShellExtension\Hungarian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp\r
502 Source: ..\..\Translations\WinMerge\Italian.po; DestDir: {app}\Languages; Components: Languages\Italian; Flags: ignoreversion comparetimestamp\r
503 Source: ..\..\Translations\ShellExtension\Italian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Italian; Flags: ignoreversion comparetimestamp\r
504 Source: ..\..\Translations\Docs\Readme\ReadMe-Italian.txt; DestDir: {app}\Docs; Components: Languages\Italian\r
505 Source: ..\..\Translations\WinMerge\Japanese.po; DestDir: {app}\Languages; Components: Languages\Japanese; Flags: ignoreversion comparetimestamp\r
506 Source: ..\..\Translations\ShellExtension\Japanese.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Japanese; Flags: ignoreversion comparetimestamp\r
507 Source: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt; DestDir: {app}\Docs; Components: Languages\Japanese\r
508 Source: ..\..\Build\Manual\htmlhelp\WinMergeJapanese.chm; DestDir: {app}\Docs; Components: Languages\Japanese\r
509 Source: ..\..\Docs\Users\ReleaseNotesJapanese.html; DestDir: {app}\Docs; Components: Languages\Japanese\r
510 Source: ..\..\Docs\Users\ChangeLogJapanese.html; DestDir: {app}\Docs; Components: Languages\Japanese\r
511 Source: ..\..\Translations\WinMerge\Korean.po; DestDir: {app}\Languages; Components: Languages\Korean; Flags: ignoreversion comparetimestamp\r
512 Source: ..\..\Translations\ShellExtension\Korean.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Korean; Flags: ignoreversion comparetimestamp\r
513 Source: ..\..\Translations\WinMerge\Lithuanian.po; DestDir: {app}\Languages; Components: Languages\Lithuanian; Flags: ignoreversion comparetimestamp\r
514 Source: ..\..\Translations\ShellExtension\Lithuanian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Lithuanian; Flags: ignoreversion comparetimestamp\r
515 Source: ..\..\Translations\Docs\Readme\ReadMe-Lithuanian.txt; DestDir: {app}\Docs; Components: Languages\Lithuanian\r
516 Source: ..\..\Translations\WinMerge\Norwegian.po; DestDir: {app}\Languages; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp\r
517 Source: ..\..\Translations\ShellExtension\Norwegian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp\r
518 Source: ..\..\Translations\WinMerge\Persian.po; DestDir: {app}\Languages; Components: Languages\Persian; Flags: ignoreversion comparetimestamp\r
519 Source: ..\..\Translations\ShellExtension\Persian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Persian; Flags: ignoreversion comparetimestamp\r
520 Source: ..\..\Translations\WinMerge\Polish.po; DestDir: {app}\Languages; Components: Languages\Polish; Flags: ignoreversion comparetimestamp\r
521 Source: ..\..\Translations\ShellExtension\Polish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Polish; Flags: ignoreversion comparetimestamp\r
522 Source: ..\..\Translations\WinMerge\Portuguese.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp\r
523 Source: ..\..\Translations\ShellExtension\Portuguese.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp\r
524 Source: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt; DestDir: {app}\Docs; Components: Languages\Portuguese\r
525 Source: ..\..\Translations\WinMerge\Romanian.po; DestDir: {app}\Languages; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp\r
526 Source: ..\..\Translations\ShellExtension\Romanian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp\r
527 Source: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt; DestDir: {app}\Docs; Components: Languages\Romanian\r
528 Source: ..\..\Translations\WinMerge\Russian.po; DestDir: {app}\Languages; Components: Languages\Russian; Flags: ignoreversion comparetimestamp\r
529 Source: ..\..\Translations\ShellExtension\Russian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Russian; Flags: ignoreversion comparetimestamp\r
530 Source: ..\..\Translations\WinMerge\Serbian.po; DestDir: {app}\Languages; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp\r
531 Source: ..\..\Translations\ShellExtension\Serbian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp\r
532 Source: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt; DestDir: {app}\Docs; Components: Languages\Serbian\r
533 Source: ..\..\Translations\WinMerge\Sinhala.po; DestDir: {app}\Languages; Components: Languages\Sinhala; Flags: ignoreversion comparetimestamp\r
534 Source: ..\..\Translations\ShellExtension\Sinhala.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Sinhala; Flags: ignoreversion comparetimestamp\r
535 Source: ..\..\Translations\WinMerge\Slovak.po; DestDir: {app}\Languages; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp\r
536 Source: ..\..\Translations\ShellExtension\Slovak.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp\r
537 Source: ..\..\Translations\Docs\Readme\ReadMe-Slovak.txt; DestDir: {app}\Docs; Components: Languages\Slovak\r
538 Source: ..\..\Translations\WinMerge\Slovenian.po; DestDir: {app}\Languages; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp\r
539 Source: ..\..\Translations\ShellExtension\Slovenian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp\r
540 Source: ..\..\Translations\Docs\Readme\ReadMe-Slovenian.txt; DestDir: {app}\Docs; Components: Languages\Slovenian\r
541 Source: ..\..\Translations\WinMerge\Spanish.po; DestDir: {app}\Languages; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp\r
542 Source: ..\..\Translations\ShellExtension\Spanish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp\r
543 Source: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt; DestDir: {app}\Docs; Components: Languages\Spanish\r
544 Source: ..\..\Translations\WinMerge\Swedish.po; DestDir: {app}\Languages; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp\r
545 Source: ..\..\Translations\ShellExtension\Swedish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp\r
546 Source: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt; DestDir: {app}\Docs; Components: Languages\Swedish\r
547 Source: ..\..\Translations\WinMerge\Tamil.po; DestDir: {app}\Languages; Components: Languages\Tamil; Flags: ignoreversion comparetimestamp\r
548 Source: ..\..\Translations\ShellExtension\Tamil.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Tamil; Flags: ignoreversion comparetimestamp\r
549 Source: ..\..\Translations\Docs\Readme\ReadMe-Tamil.txt; DestDir: {app}\Docs; Components: Languages\Tamil\r
550 Source: ..\..\Translations\WinMerge\Turkish.po; DestDir: {app}\Languages; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp\r
551 Source: ..\..\Translations\ShellExtension\Turkish.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp\r
552 Source: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt; DestDir: {app}\Docs; Components: Languages\Turkish\r
553 Source: ..\..\Translations\WinMerge\Ukrainian.po; DestDir: {app}\Languages; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp\r
554 Source: ..\..\Translations\ShellExtension\Ukrainian.po; DestDir: {app}\Languages\ShellExtension; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp\r
555 Source: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt; DestDir: {app}\Docs; Components: Languages\Ukrainian\r
556 \r
557 ;Filters\r
558 Source: ..\..\Filters\*.flt; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
559 Source: ..\..\Filters\FileFilter.tmpl; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
560 \r
561 ;ColorSchemes\r
562 Source: ..\..\ColorSchemes\*.ini; DestDir: {app}\ColorSchemes; Flags: sortfilesbyextension comparetimestamp ignoreversion\r
563 \r
564 ;Documentation\r
565 Source: ..\..\Docs\Users\ReadMe.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
566 Source: ..\..\Docs\Users\Contributors.txt; DestDir: {app}; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
567 Source: ..\..\Docs\Users\ReleaseNotes.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
568 Source: ..\..\Docs\Users\ChangeLog.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
569 Source: ..\..\Build\Manual\htmlhelp\WinMerge.chm; DestDir: {app}\Docs\; Flags: overwritereadonly uninsremovereadonly; Components: Core\r
570 Source: ..\..\Docs\users\GPL.rtf; DestDir: {app}\Docs\; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
571 \r
572 ;Plugins\r
573 ;Please note IgnoreVersion and CompareTimeStamp are to instruct the installer to not not check for version info and go straight to comparing modification dates\r
574 Source: ..\..\Plugins\Plugins.xml; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
575 Source: ..\..\Plugins\dlls\editor addin.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
576 Source: ..\..\Plugins\dlls\insert datetime.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
577 Source: ..\..\Plugins\dlls\CompareMSExcelFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
578 Source: ..\..\Plugins\dlls\CompareMSWordFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
579 Source: ..\..\Plugins\dlls\CompareMSPowerPointFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
580 Source: ..\..\Plugins\dlls\CompareMSVisioFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
581 Source: ..\..\Plugins\dlls\ApplyPatch.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
582 Source: ..\..\Plugins\dlls\PrediffLineFilter.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
583 Source: ..\..\Plugins\dlls\{#ARCH}\IgnoreColumns.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
584 Source: ..\..\Plugins\dlls\{#ARCH}\IgnoreCommentsC.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
585 Source: ..\..\Plugins\dlls\{#ARCH}\IgnoreFieldsComma.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
586 Source: ..\..\Plugins\dlls\{#ARCH}\IgnoreFieldsTab.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
587 Source: ..\..\Plugins\dlls\IgnoreLeadingLineNumbers.sct; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
588 \r
589 ;Frhed\r
590 Source: ..\..\Build\{#ARCH}\Release\Frhed\GPL.txt; DestDir: {app}\Frhed; Components: Core\r
591 ;Source: ..\..\Build\{#ARCH}\Release\Frhed\frhed.exe; DestDir: {app}\Frhed; Components: Core\r
592 Source: ..\..\Build\{#ARCH}\Release\Frhed\hekseditU.dll; DestDir: {app}\Frhed; Flags: ignoreversion replacesameversion; Components: Core\r
593 Source: ..\..\Build\{#ARCH}\Release\Frhed\Docs\ChangeLog.txt; DestDir: {app}\Frhed\Docs; Components: Core\r
594 Source: ..\..\Build\{#ARCH}\Release\Frhed\Docs\Contributors.txt; DestDir: {app}\Frhed\Docs; Components: Core\r
595 Source: ..\..\Build\{#ARCH}\Release\Frhed\Docs\History.txt; DestDir: {app}\Frhed\Docs; Components: Core\r
596 Source: ..\..\Build\{#ARCH}\Release\Frhed\Docs\Links.txt; DestDir: {app}\Frhed\Docs; Components: Core\r
597 Source: ..\..\Build\{#ARCH}\Release\Frhed\Docs\Sample.tpl  ; DestDir: {app}\Frhed\Docs; Components: Core\r
598 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\de.po; DestDir: {app}\Frhed\Languages; Components: Core\r
599 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\fr.po; DestDir: {app}\Frhed\Languages; Components: Core\r
600 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\ja.po; DestDir: {app}\Frhed\Languages; Components: Core\r
601 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\nl.po; DestDir: {app}\Frhed\Languages; Components: Core\r
602 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\sl.po; DestDir: {app}\Frhed\Languages; Components: Core\r
603 Source: ..\..\Build\{#ARCH}\Release\Frhed\Languages\heksedit.lng; DestDir: {app}\Frhed\Languages; Components: Core\r
604 \r
605 ;WinIMerge\r
606 Source: ..\..\Build\{#ARCH}\Release\WinIMerge\GPL.txt; DestDir: {app}\WinIMerge; Components: Core\r
607 Source: ..\..\Build\{#ARCH}\Release\WinIMerge\freeimage-license-gplv2.txt; DestDir: {app}\WinIMerge; Components: Core\r
608 ;Source: ..\..\Build\{#ARCH}\Release\WinIMerge\WinIMerge.exe; DestDir: {app}\WinIMerge; Components: Core\r
609 Source: ..\..\Build\{#ARCH}\Release\WinIMerge\WinIMergeLib.dll; DestDir: {app}\WinIMerge; Flags: ignoreversion replacesameversion; Components: Core\r
610 Source: ..\..\Build\{#ARCH}\Release\WinIMerge\vcomp140.dll; DestDir: {app}; Components: Core\r
611 \r
612 ;WinWebDiff\r
613 Source: ..\..\Build\{#ARCH}\Release\WinWebDiff\LICENSE*.txt; DestDir: {app}\WinWebDiff; Components: Core\r
614 Source: ..\..\Build\{#ARCH}\Release\WinWebDiff\WinWebDiffLib.dll; DestDir: {app}\WinWebDiff; Flags: ignoreversion replacesameversion; Components: Core\r
615 \r
616 ;GNU patch\r
617 Source: ..\..\Build\msys2\*.*; DestDir: {app}\Commands\msys2; Flags: recursesubdirs; Components: Plugins\r
618 ; HTML Tidy\r
619 Source: ..\..\Build\tidy-html5\bin\*.*; DestDir: {app}\Commands\tidy-html5; Flags: recursesubdirs; Components: Plugins\r
620 Source: ..\..\Build\tidy-html5\tidy-html5-5.4.0\README\LICENSE.md; DestDir: {app}\Commands\tidy-html5; Flags: recursesubdirs; Components: Plugins\r
621 ; jq\r
622 Source: ..\..\Build\jq\jq-win32.exe; DestDir: {app}\Commands\jq; DestName: jq.exe; Flags: recursesubdirs; Components: Plugins\r
623 Source: ..\..\Build\jq\jq-jq-1.7\COPYING; DestDir: {app}\Commands\jq; Flags: recursesubdirs; Components: Plugins\r
624 ; md4c\r
625 Source: ..\..\Build\md4c\mingw32\bin\*.*; DestDir: {app}\Commands\md4c; Flags: recursesubdirs; Components: Plugins\r
626 Source: ..\..\Build\md4c\mingw32\share\licenses\md4c\LICENSE.md; DestDir: {app}\Commands\md4c; Flags: recursesubdirs; Components: Plugins\r
627 Source: ..\..\Plugins\Commands\md4c\*.bat; DestDir: {app}\Commands\md4c; Flags: recursesubdirs; Components: Plugins\r
628 ; PlantUML\r
629 Source: ..\..\Plugins\Commands\PlantUML\*.bat; DestDir: {app}\Commands\PlantUML; Flags: recursesubdirs; Components: Plugins\r
630 Source: ..\..\Plugins\Commands\PlantUML\*.txt; DestDir: {app}\Commands\PlantUML; Flags: recursesubdirs; Components: Plugins\r
631 ; Apache Tika\r
632 Source: ..\..\Plugins\Commands\Apache-Tika\*.bat; DestDir: {app}\Commands\Apache-Tika; Flags: recursesubdirs; Components: Plugins\r
633 Source: ..\..\Plugins\Commands\Apache-Tika\*.txt; DestDir: {app}\Commands\Apache-Tika; Flags: recursesubdirs; Components: Plugins\r
634 ; q\r
635 Source: ..\..\Plugins\Commands\q\*.bat; DestDir: {app}\Commands\q; Flags: recursesubdirs; Components: Plugins\r
636 Source: ..\..\Plugins\Commands\q\*.txt; DestDir: {app}\Commands\q; Flags: recursesubdirs; Components: Plugins\r
637 ; yq\r
638 Source: ..\..\Plugins\Commands\yq\*.bat; DestDir: {app}\Commands\yq; Flags: recursesubdirs; Components: Plugins\r
639 Source: ..\..\Plugins\Commands\yq\*.txt; DestDir: {app}\Commands\yq; Flags: recursesubdirs; Components: Plugins\r
640 ; dumpbin\r
641 Source: ..\..\Plugins\Commands\dumpbin\*.bat; DestDir: {app}\Commands\dumpbin; Flags: recursesubdirs; Components: Plugins\r
642 ; ildasm\r
643 Source: ..\..\Plugins\Commands\ildasm\*.bat; DestDir: {app}\Commands\ildasm; Flags: recursesubdirs; Components: Plugins\r
644 ; Java\r
645 Source: ..\..\Plugins\Commands\Java\*.bat; DestDir: {app}\Commands\Java; Flags: recursesubdirs; Components: Plugins\r
646 Source: ..\..\Plugins\Commands\Java\*.txt; DestDir: {app}\Commands\Java; Flags: recursesubdirs; Components: Plugins\r
647 ; DownloadFiles.bat\r
648 Source: ..\..\Plugins\Commands\DownloadFiles.bat; DestDir: {app}\Commands\; Flags: recursesubdirs; Components: Plugins\r
649 \r
650 [Dirs]\r
651 Name: "{app}\MergePlugins"\r
652 \r
653 [Icons]\r
654 ;Start Menu Icons\r
655 Name: {group}\WinMerge; Filename: {app}\WinMergeU.exe; AppUserModelID: "Thingamahoochie.WinMerge"; Check: not WizardNoIcons\r
656 Name: {group}\{cm:UsersGuide}; Filename: {app}\Docs\WinMerge.chm; Check: not WizardNoIcons\r
657 \r
658 ;Desktop Icon\r
659 Name: {autodesktop}\WinMerge; Filename: {app}\WinMergeU.exe; Tasks: desktopicon\r
660 \r
661 ;Quick Launch Icon\r
662 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\WinMergeU.exe; Tasks: quicklaunchicon\r
663 \r
664 [Registry]\r
665 Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
666 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
667 Root: HKA;  Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
668 Root: HKA;  Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
669 \r
670 ;Add Project file extension (.WinMerge) to known extensions and\r
671 ;set WinMerge to open those files\r
672 ;set Notepad to edit project files\r
673 Root: HKA;  Subkey: Software\Classes\.WinMerge; ValueType: String; ValueData: WinMerge.Project.File; Flags: uninsdeletekey\r
674 Root: HKA;  Subkey: Software\Classes\WinMerge.Project.File; ValueType: String; ValueData: {cm:ProjectFileDesc}; Flags: uninsdeletekey\r
675 Root: HKA;  Subkey: Software\Classes\WinMerge.Project.File\shell\open\command; ValueType: String; ValueData: """{app}\WinMergeU.exe"" ""%1"""; Flags: uninsdeletekey\r
676 Root: HKA;  Subkey: Software\Classes\WinMerge.Project.File\shell\edit\command; ValueType: String; ValueData: """NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletekey\r
677 Root: HKA;  Subkey: Software\Classes\WinMerge.Project.File\DefaultIcon; ValueType: String; ValueData: """{app}\WinMergeU.exe"",1"; Flags: uninsdeletekey\r
678 \r
679 ; delete obsolete values\r
680 ;In Inno Setup Version 4.18 ValueData couldn't be null and compile,\r
681 ;if this is fixed in a later version feel free to remove the parameter\r
682 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue\r
683 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue\r
684 \r
685 ;This removes the key that remembers which messageboxes to hide from the user, this is because the text of that message\r
686 ;can change and make it more clear as to the user why they might want to pay attention to a particular dialog and also\r
687 ;because a particular message might be added or removed and a new message might occupy a previous message's ID number\r
688 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\MessageBoxes; ValueType: none; Flags: deletekey\r
689 \r
690 Root: HKA;  SubKey: Software\Classes\Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror\r
691 Root: HKA;  SubKey: Software\Classes\Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror\r
692 \r
693 ;Adds "Start Menu" --> "Run" Support for WinMerge\r
694 Root: HKA;  Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey\r
695 Root: HKA;  Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey\r
696 Root: HKA;  SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\WinMergeU.exe\r
697 Root: HKA;  SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\WinMergeU.exe\r
698 \r
699 ;Registry Keys for use by ShellExtension.dll\r
700 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\WinMergeU.exe\r
701 Root: HKCU;  SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\WinMergeU.exe\r
702 \r
703 ;Enables or disables the Context Menu preference based on what the user selects during install\r
704 ;Initially the Context menu is explicitly disabled:\r
705 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0;\r
706 \r
707 ;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.\r
708 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension\r
709 Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: {code:ShellMenuEnabled}\r
710 \r
711 ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application\r
712 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\WinMergeU.exe; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
713 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
714 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\WinMergeU.exe; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
715 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
716 \r
717 ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way\r
718 ;if it is installed at a later date this will automatically support it)\r
719 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\WinMergeU.exe; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
720 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
721 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\WinMergeU.exe; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
722 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
723 \r
724 ;Set WinMerge as TortoiseGit diff tool\r
725 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Diff; ValueData: {app}\WinMergeU.exe -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseGit\r
726 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGitMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool; Tasks: TortoiseGit\r
727 \r
728 ;Set WinMerge as TortoiseSVN diff tool\r
729 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\WinMergeU.exe -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN\r
730 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGitMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool; Tasks: TortoiseSVN\r
731 \r
732 ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in\r
733 ;(unless the user already has a startup language specified)\r
734 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00001401; Flags: deletevalue; Languages: Arabic\r
735 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000042d; Flags: deletevalue; Languages: Basque\r
736 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000402; Flags: deletevalue; Languages: Bulgarian\r
737 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000403; Flags: deletevalue; Languages: Catalan\r
738 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000804; Flags: deletevalue; Languages: ChineseSimplified\r
739 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000404; Flags: deletevalue; Languages: ChineseTraditional\r
740 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000483; Flags: deletevalue; Languages: Corsican\r
741 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041a; Flags: deletevalue; Languages: Croatian\r
742 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000405; Flags: deletevalue; Languages: Czech\r
743 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000406; Flags: deletevalue; Languages: Danish\r
744 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000413; Flags: deletevalue; Languages: Dutch\r
745 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000409; Flags: deletevalue; Languages: English\r
746 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040b; Flags: deletevalue; Languages: Finnish\r
747 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040c; Flags: deletevalue; Languages: French\r
748 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000456; Flags: deletevalue; Languages: Galician\r
749 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000407; Flags: deletevalue; Languages: German\r
750 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000408; Flags: deletevalue; Languages: Greek\r
751 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040e; Flags: deletevalue; Languages: Hungarian\r
752 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000410; Flags: deletevalue; Languages: Italian\r
753 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000411; Flags: deletevalue; Languages: Japanese\r
754 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000412; Flags: deletevalue; Languages: Korean\r
755 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000427; Flags: deletevalue; Languages: Lithuanian \r
756 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000414; Flags: deletevalue; Languages: Norwegian\r
757 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000429; Flags: deletevalue; Languages: Persian\r
758 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000415; Flags: deletevalue; Languages: Polish\r
759 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000816; Flags: deletevalue; Languages: Portuguese\r
760 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000416; Flags: deletevalue; Languages: PortugueseBrazilian\r
761 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000418; Flags: deletevalue; Languages: Romanian\r
762 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000419; Flags: deletevalue; Languages: Russian\r
763 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c1a; Flags: deletevalue; Languages: Serbian\r
764 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000045b; Flags: deletevalue; Languages: Sinhala\r
765 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041b; Flags: deletevalue; Languages: Slovak\r
766 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000424; Flags: deletevalue; Languages: Slovenian\r
767 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c0a; Flags: deletevalue; Languages: Spanish\r
768 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041D; Flags: deletevalue; Languages: Swedish\r
769 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000449; Flags: deletevalue; Languages: Tamil\r
770 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041f; Flags: deletevalue; Languages: Turkish\r
771 Root: HKA;  SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000422; Flags: deletevalue; Languages: Ukrainian\r
772 \r
773 \r
774 [Run]\r
775 ;This will no longer appear unless the user chose to make a start menu group in the first place\r
776 Filename: {win}\Explorer.exe; Description: {cm:ViewStartMenuFolder}; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent unchecked; Check: GroupCreated\r
777 \r
778 Filename: {app}\WinMergeU.exe; Description: {cm:LaunchProgram,WinMerge}; Flags: nowait postinstall skipifsilent runmaximized\r
779 \r
780 Filename: {syswow64}\regsvr32.exe; Parameters: "/s ""{app}\{#ShellExtension32bit}"""; Flags: waituntilterminated; Check: IsAdminInstallMode; Components: ShellExtension32bit\r
781 Filename: {syswow64}\regsvr32.exe; Parameters: "/s /n /i:user ""{app}\{#ShellExtension32bit}"""; Flags: waituntilterminated; Check: not IsAdminInstallMode; Components: ShellExtension32bit\r
782 Filename: {sys}\regsvr32.exe; Parameters: "/s ""{app}\{#ShellExtension64bit}"""; Flags: waituntilterminated; Check: IsAdminInstallMode and not IsWindows11OrLater\r
783 Filename: {sys}\regsvr32.exe; Parameters: "/s /n /i:user ""{app}\{#ShellExtension64bit}"""; Flags: waituntilterminated; Check: not IsAdminInstallMode and not IsWindows11OrLater\r
784 Filename: {app}\WinMerge32BitPluginProxy.exe; Parameters: "/RegServer"; Flags: waituntilidle; Check: IsAdminInstallMode\r
785 Filename: {app}\WinMerge32BitPluginProxy.exe; Parameters: "/RegServerPerUser"; Flags: waituntilidle; Check: not IsAdminInstallMode\r
786 Filename: {win}\sysnative\WindowsPowerShell\v1.0\PowerShell.exe; Parameters: "-c ""$host.ui.RawUI.WindowTitle = 'Registering WinMergeContextMenu package...'; if ((Get-AppxPackage -name WinMerge) -eq $null) {{ Add-AppxPackage '{app}\WinMergeContextMenuPackage.msix' -ExternalLocation '{app}'}"""; Flags: waituntilterminated; Check: IsWindows11OrLater\r
787 \r
788 [UninstallRun]\r
789 Filename: {syswow64}\regsvr32.exe; Parameters: "/s /u ""{app}\{#ShellExtension32bit}"""; Flags: waituntilterminated; Check: IsAdminInstallMode; Components: ShellExtension32bit\r
790 Filename: {syswow64}\regsvr32.exe; Parameters: "/s /u /n /i:user ""{app}\{#ShellExtension32bit}"""; Flags: waituntilterminated; Check: not IsAdminInstallMode; Components: ShellExtension32bit\r
791 Filename: {sys}\regsvr32.exe; Parameters: "/s /u ""{app}\{#ShellExtension64bit}"""; Flags: waituntilterminated; Check: IsAdminInstallMode\r
792 Filename: {sys}\regsvr32.exe; Parameters: "/s /u /n /i:user ""{app}\{#ShellExtension64bit}"""; Flags: waituntilterminated; Check: not IsAdminInstallMode\r
793 Filename: {app}\WinMerge32BitPluginProxy.exe; Parameters: "/UnregServer"; Flags: waituntilidle; Check: IsAdminInstallMode\r
794 Filename: {app}\WinMerge32BitPluginProxy.exe; Parameters: "/UnregServerPerUser"; Flags: waituntilidle; Check: not IsAdminInstallMode\r
795 \r
796 [UninstallDelete]\r
797 ;Remove 7-zip integration dlls possibly installed (by hand or using separate installer)\r
798 Name: {app}\Merge7z*.dll; Type: files\r
799 Name: {app}\7zip_pad.xml; Type: files\r
800 Name: {app}\Codecs; Type: filesandordirs\r
801 Name: {app}\Formats; Type: filesandordirs\r
802 Name: {app}\Lang; Type: filesandordirs\r
803 \r
804 Name: {group}; Type: dirifempty; Check: not WizardNoIcons\r
805 Name: {app}; Type: dirifempty\r
806 \r
807 \r
808 [Code]\r
809 Var\r
810     g_CheckListBox: TNewCheckListBox;\r
811     g_IsExplorerRestartRequired: boolean;\r
812 \r
813 {Determines whether or not the user chose to create a start menu}\r
814 Function GroupCreated(): boolean;\r
815 Var\r
816     {Stores the path of the start menu group Inno Setup may have created}\r
817     strGroup_Path: string;\r
818 Begin\r
819     {Saves the path that Inno Setup intended to create the start menu group at}\r
820     if not WizardNoIcons Then strGroup_Path := ExpandConstant('{group}');\r
821 \r
822     {If the start menu path isn't blank then..}\r
823     if strGroup_Path <> '' Then\r
824         Begin\r
825             {If the user choose to create the start menu then this folder will exist.\r
826             If the folder exists then GroupCreated = True otherwise it does not.}\r
827             Result := DirExists(strGroup_Path)\r
828         end\r
829     else\r
830         {Since the start menu path is null, we know that the user chose not to create a\r
831         start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}\r
832         Result := False;\r
833 \r
834      {Debug\r
835 \r
836     If DirExists(strGroup_Path) = True Then\r
837         Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)\r
838     Else\r
839         Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }\r
840 End;\r
841 \r
842 \r
843 {Determines whether or not TortoiseCVS is installed}\r
844 Function TortoiseCVSInstalled(): boolean;\r
845 Begin\r
846         {This absolutely must remain as \CustomIcons, because our application used to create some TortoiseCVS keys even if the application wasn't installed!}\r
847     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\CustomIcons') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\Icons');\r
848 End;\r
849 \r
850 {Determines whether or not TortoiseGit is installed}\r
851 Function TortoiseGitInstalled(): boolean;\r
852 Begin\r
853     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseGit') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseGit');\r
854 End;\r
855 \r
856 {Determines whether or not TortoiseSVN is installed}\r
857 Function TortoiseSVNInstalled(): boolean;\r
858 Begin\r
859     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseSVN') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseSVN');\r
860 End;\r
861 \r
862 Function OldGroup(): string;\r
863 Begin\r
864     {Stores where in \All Users\Programs\ our start menu used to be located}\r
865      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1', 'Inno Setup: Icon Group', Result)\r
866 End;\r
867 \r
868 Procedure DeletePreviousStartMenu();\r
869 Var\r
870         strOld: string;\r
871         strNew: string;\r
872         strMessage: string;\r
873 Begin\r
874     {Detects the previous start menu group's path, if any}\r
875     strOld := OldGroup();\r
876 \r
877     {Detects the current start menu group's path, if any (not creating a group is a valid option)}\r
878     If not WizardNoIcons Then strNew := ExpandConstant('{group}');\r
879 \r
880     {removes the start menu portion of the path from the group path making it match the format of strOld}\r
881     StringChange(strNew, ExpandConstant('{commonprograms}\'), '')\r
882 \r
883     {if the user does have a previous start menu location then..}\r
884     If strOld <> '' Then\r
885         Begin\r
886             {If the current and previous start menu locations are different then...}\r
887             If Uppercase(strOld) <> UpperCase(strNew) Then\r
888                 Begin\r
889                     strMessage := ExpandConstant('{cm:DeletePreviousStartMenu}');\r
890                     strMessage := Format(strMessage, [strOld, strNew]);\r
891 \r
892                     {Display a dialog asking the user if they'd like to delete the previous start menu group}\r
893                     {If they'd like to delete the previous start menu group then...}\r
894                     If SuppressibleMsgbox(strMessage, mbConfirmation, mb_YesNo, mrYes) = mrYes Then\r
895                         Begin\r
896                             strOld := ExpandConstant('{commonprograms}\') + strOld;\r
897                             {Remove old start menu}\r
898                             DelTree(strOld, True, True, True);\r
899                         End;\r
900                 End;\r
901         End;\r
902 End;\r
903 \r
904 Function UnregisterWinMergeContextMenuPackage: Boolean;\r
905 var\r
906   ResultCode: Integer;\r
907 Begin;\r
908   if RegKeyExists(HKCU, 'SOFTWARE\Classes\PackagedCom\ClassIndex\{90340779-F37E-468E-9728-A2593498ED32}') then\r
909     Exec(ExpandConstant('{win}\sysnative\WindowsPowerShell\v1.0\PowerShell.exe'), '-c "$host.ui.RawUI.WindowTitle = ""Unregistering WinMergeContextMenu package...""; Get-AppxPackage -name WinMerge | Remove-AppxPackage"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);  \r
910   Result := true;\r
911 End;\r
912 \r
913 function GetCurrentProcessId: DWORD;\r
914   external 'GetCurrentProcessId@kernel32.dll stdcall';\r
915 \r
916 function RenameShellExtensionDLLIfExists(Filename: String) : Boolean;\r
917 var\r
918   dest: String;\r
919 begin\r
920   if FileExists(Filename) then begin\r
921     dest := Filename + '.' + IntToStr(GetCurrentProcessId()) + '.old';\r
922     RenameFile(Filename, dest);\r
923   end;\r
924   Result := true;\r
925 end;\r
926 \r
927 function DeleteRenamedShellExtensionDLL(Filename: String; fRestartReplace: Boolean; fRetry: Boolean) : Boolean;\r
928 var\r
929   dest: String;\r
930   i: Integer;\r
931 begin\r
932   dest := Filename + '.' + IntToStr(GetCurrentProcessId()) + '.old';\r
933   if FileExists(dest) then begin\r
934     for i := 0 to 40 do begin\r
935       Result := DeleteFile(dest);\r
936       if not fRetry or Result = true then break;\r
937       Sleep(100);\r
938     end;\r
939     if Result = false then begin\r
940       if fRestartReplace then begin\r
941         RestartReplace(dest, '');\r
942       end;\r
943       g_IsExplorerRestartRequired := true;\r
944     end;\r
945   end;\r
946   Result := true;\r
947 end;\r
948 \r
949 procedure RestartExplorer;\r
950 var\r
951   ResultCode: Integer;\r
952 begin\r
953   Exec(ExpandConstant('{sys}\taskkill.exe'), '/f /im explorer.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);\r
954   Exec(ExpandConstant('{win}\explorer.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);\r
955 end;\r
956 \r
957 procedure DeleteRenamedFiles();\r
958 begin\r
959   DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\{#ShellExtension32bit}'), false, false);\r
960   DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\{#ShellExtension64bit}'), false, false);\r
961   DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\WinMergeContextMenu.dll'), false, false);\r
962   if g_IsExplorerRestartRequired then begin\r
963     if SuppressibleMsgBox(ExpandConstant('{cm:ExplorerNeedsRestart}'), mbConfirmation, MB_YESNO or MB_DEFBUTTON2, IDNO) = IDYES then begin\r
964       RestartExplorer();\r
965       DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\{#ShellExtension32bit}'), true, true);\r
966       DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\{#ShellExtension64bit}'), true, true);\r
967       DeleteRenamedShellExtensionDLL(ExpandConstant('{app}\WinMergeContextMenu.dll'), true, true);\r
968     end;\r
969   end;\r
970 end;\r
971 \r
972 procedure RegisterUserTasks();\r
973 var\r
974   params: string;\r
975   UserTasksFlags: DWORD;\r
976   ResultCode: Integer;\r
977 Begin\r
978   UserTasksFlags := 4097; { 4096(Clipboard Compare)+1(New Text Compare) }\r
979   RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'UserTasksFlags', UserTasksFlags);\r
980   params := '/s- /minimize /noninteractive /set-usertasks-to-jumplist ' + IntToStr(UserTasksFlags);\r
981   Exec(ExpandConstant('{app}\WinMergeU.exe'), params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);\r
982 end;\r
983 \r
984 {This event procedure is queed each time the user changes pages within the installer}\r
985 Procedure CurPageChanged(CurPage: integer);\r
986 Begin\r
987     {if the installer reaches the file copy page then...}\r
988     If CurPage = wpInstalling Then\r
989             {Delete the previous start menu group if the location has changed since the last install}\r
990             DeletePreviousStartMenu;\r
991     If CurPage = wpFinished Then Begin\r
992       DeleteRenamedFiles;\r
993       RegisterUserTasks;\r
994     End;\r
995 End;\r
996 \r
997 // Checks if context menu is already enabled for shell extension\r
998 // If so, we won't overwrite its existing value in [Registry] section\r
999 Function ShellMenuEnabled(Unused: string): string;\r
1000 Var\r
1001   ContextMenuEnabled: DWORD;\r
1002 Begin\r
1003   ContextMenuEnabled := 0;\r
1004   RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'ContextMenuEnabled', ContextMenuEnabled);\r
1005   if WizardIsTaskSelected('ShellExtension') then\r
1006     Result := inttostr(ContextMenuEnabled or 1)\r
1007   else\r
1008     Result := '0';\r
1009 End;\r
1010 \r
1011 // Add WinMerge to system path.\r
1012 // This requires certain order of things to work:\r
1013 // #1 ModPathDir function must be first (it gets called by others)\r
1014 // #2 include of modpath.iss so modpath code gets included\r
1015 // #3 CurStepChanged and CurUninstallStepChanged procedures as they call\r
1016 //    ModPath (in modpath.iss)\r
1017 function ModPathDir(): TArrayOfString;\r
1018 var\r
1019     Dir:        TArrayOfString;\r
1020 begin\r
1021     setArrayLength(Dir, 1)\r
1022         Dir[0] := ExpandConstant('{app}');\r
1023         Result := Dir;\r
1024 end;\r
1025 \r
1026 function UseAs3WayMergeTool(): Boolean;\r
1027 begin\r
1028     Result := g_CheckListBox.Checked[0];\r
1029 end;\r
1030 \r
1031 function TortoiseSVNGitMergeToolCommandLine(Unused: string): string;\r
1032 var\r
1033     lmr: string;\r
1034     Args: string;\r
1035 begin\r
1036     if g_CheckListBox.Checked[1] then begin\r
1037         lmr := 'r';\r
1038         Args := '/e /ub /fr /wl /wm /dl %bname /dm %tname /dr %yname  %base %theirs %mine /o %merged';\r
1039     end else if g_CheckListBox.Checked[2] then begin\r
1040         lmr := 'm';\r
1041         Args := '/e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname  %theirs %base %mine /o %merged';\r
1042     end else begin\r
1043         lmr := 'l';\r
1044         Args := '/e /ub /fl /wm /wr /dl %yname /dm %tname /dr %bname  %mine %theirs %base /o %merged';\r
1045     end;\r
1046     if g_CheckListBox.Checked[4] then begin\r
1047         Args := Args + ' /a' + lmr;\r
1048     end;\r
1049     Result := ExpandConstant('{app}\WinMergeU.exe') + ' ' + Args;\r
1050 end;\r
1051 \r
1052 function ThreeWayMergePage_ShouldSkipPage(Page: TWizardPage): Boolean;\r
1053 begin\r
1054     Result := not (WizardIsTaskSelected('TortoiseSVN') or WizardIsTaskSelected('TortoiseGit'));\r
1055 end;\r
1056 \r
1057 #include "modpath.is6.iss"\r
1058 \r
1059 procedure CurStepChanged(CurStep: TSetupStep);\r
1060 Begin\r
1061     if CurStep = ssPostInstall then\r
1062     begin\r
1063                 if WizardIsTaskSelected('modifypath') then\r
1064                         ModPath();\r
1065     end;\r
1066 End;\r
1067 \r
1068 Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);\r
1069 var\r
1070         appdir:                 String;\r
1071         selectedTasks:  AnsiString;\r
1072 Begin\r
1073         appdir := ExpandConstant('{app}')\r
1074         if CurUninstallStep = usUninstall then begin\r
1075                 if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then\r
1076                         if Pos('modifypath', selectedTasks) > 0 then\r
1077                                 ModPath();\r
1078                 DeleteFile(appdir + '\uninsTasks.txt');\r
1079                 UnregisterWinMergeContextMenuPackage()\r
1080         end;\r
1081 End;\r
1082 \r
1083 function BooleanToString(Value : Boolean) : String; \r
1084 begin\r
1085   if Value then\r
1086     Result := 'true'\r
1087   else\r
1088     Result := 'false';\r
1089 end;\r
1090 \r
1091 function StringToBoolean(Value : String) : Boolean; \r
1092 begin\r
1093   if Value = 'true' then\r
1094     Result := true\r
1095   else\r
1096     Result := false;\r
1097 end;\r
1098 \r
1099 function AreSourceAndDestinationOfShellExtensionSame(Filename: String) : Boolean;\r
1100 var\r
1101   ver: String;\r
1102 begin\r
1103   ver := ''\r
1104   GetVersionNumbersString(Filename, ver);\r
1105   if ver = ExpandConstant('{#ShellExtensionVersion}') then\r
1106     Result := true\r
1107   else\r
1108     Result := false;\r
1109 end;\r
1110 \r
1111 function AreSourceAndDestinationOfWinMergeContextMenuSame(Filename: String) : Boolean;\r
1112 var\r
1113   ver: String;\r
1114 begin\r
1115   ver := ''\r
1116   GetVersionNumbersString(Filename, ver);\r
1117   if ver = ExpandConstant('{#WinMergeContextMenuVersion}') then\r
1118     Result := true\r
1119   else\r
1120     Result := false;\r
1121 end;\r
1122 \r
1123 procedure RegisterPreviousData(PreviousDataKey: Integer);\r
1124 begin\r
1125   SetPreviousData(PreviousDataKey, 'UseAs3WayMergeTool', BooleanToString(g_CheckListBox.Checked[0]));\r
1126   SetPreviousData(PreviousDataKey, 'MergeAtRightPane', BooleanToString(g_CheckListBox.Checked[1]));\r
1127   SetPreviousData(PreviousDataKey, 'MergeAtCenterPane', BooleanToString(g_CheckListBox.Checked[2]));\r
1128   SetPreviousData(PreviousDataKey, 'MergeAtLeftPane', BooleanToString(g_CheckListBox.Checked[3]));\r
1129   SetPreviousData(PreviousDataKey, 'AutoMergeAtStartup', BooleanToString(g_CheckListBox.Checked[4]));\r
1130 end;\r
1131 \r
1132 procedure InitializeWizard();\r
1133 var\r
1134   Page: TWizardPage;\r
1135 begin\r
1136   Page := CreateCustomPage(wpSelectTasks, ExpandConstant('{cm:ThreeWayMergeWizardPageCaption}'), ExpandConstant('{cm:ThreeWayMergeWizardPageDescription}'));\r
1137   Page.OnShouldSkipPage := @ThreeWayMergePage_ShouldSkipPage;\r
1138 \r
1139   g_CheckListBox := TNewCheckListBox.Create(Page);\r
1140   g_CheckListBox.Width := Page.SurfaceWidth;\r
1141   g_CheckListBox.Height := ScaleY(128);\r
1142   g_CheckListBox.Flat := True;\r
1143   g_CheckListBox.BorderStyle := bsNone;\r
1144   g_CheckListBox.Color := Page.SurfaceColor;\r
1145   g_CheckListBox.Parent := Page.Surface;\r
1146   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:RegisterWinMergeAs3WayMergeTool}'), '', 0, StringToBoolean(GetPreviousData('UseAs3WayMergeTool', 'true')), True, False, True, nil);\r
1147   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtRightPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtRightPane', 'true')), True, nil);\r
1148   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtCenterPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtCenterPane', 'false')), True, nil);\r
1149   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtLeftPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtLeftPane', 'false')), True, nil);\r
1150   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:AutoMergeAtStartup}'), '', 1, StringToBoolean(GetPreviousData('AutoMergeAtStartup', 'true')), True, False, True, nil);\r
1151   g_IsExplorerRestartRequired := false;\r
1152 end;\r
1153 \r
1154 procedure DeinitializeSetup();\r
1155 var\r
1156   ResultCode: Integer;\r
1157   { Start Explorer just before exiting the installer if the Explorer restart that was run to install the ShellExtension fails. }\r
1158 begin\r
1159   if FindWindowByClassName('progman') = 0 then begin\r
1160     Exec(ExpandConstant('{win}\explorer.exe'), '', '', SW_SHOW, ewNoWait, ResultCode)\r
1161   end\r
1162 end;\r
1163 \r
1164 Function IsWindows11OrLater(): Boolean;\r
1165 Var\r
1166   OSVersion: TWindowsVersion;\r
1167 Begin\r
1168   Result := false;\r
1169   GetWindowsVersionEx(OSVersion);\r
1170   if OSVersion.Major > 10 then\r
1171     Result := true\r
1172   else if (OSVersion.Major = 10) and (OSVersion.Minor > 0) then\r
1173     Result := true\r
1174   else if (OSVersion.Major = 10) and (OSVersion.Build >= 22000) then\r
1175     Result := true\r
1176   else\r
1177     Result := false;\r
1178 End;\r