1 <?xml version="1.0" encoding="utf-8"?>
3 <!-- WiX source code for the PuTTY installer. -->
5 <?if $(var.Win64) = yes ?>
6 <?define Bitness = " (64-bit)" ?>
7 <?define RegKeyPathLocation = "Software\SimonTatham\PuTTY64" ?>
8 <?define InstallerVersion = "200" ?>
9 <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
10 <?define UpgradeCode_GUID = "C9EAA861-2B72-4FAF-9FEE-EEB1AD5FD15E" ?>
11 <?define PuTTY_Component_GUID = "C673C970-25AE-4659-9621-A1FE0598E9DC" ?>
12 <?define Pageant_Component_GUID = "BA37328A-9A9C-4912-B84D-9C4A21B4E79A" ?>
13 <?define PSFTP_Component_GUID = "8BC2740F-CD4A-4076-8C33-2847ECA17B4E" ?>
14 <?define PuTTYgen_Component_GUID = "4E3F554E-C9C9-419B-9816-94135D1F6EFF" ?>
15 <?define Plink_Component_GUID = "72C38830-1C06-40D5-B2C5-BE21F4C9D529" ?>
16 <?define PSCP_Component_GUID = "58FCAA52-CEF9-4665-B95E-7695FCF8F0A9" ?>
17 <?define HelpFile_Component_GUID = "B880CECB-2CDA-4DB1-8EB3-1627D29394FB" ?>
18 <?define Website_Component_GUID = "08A334E8-D376-438A-98C7-4E65BE09A335" ?>
19 <?define LICENCE_Component_GUID = "D15E5FA9-C912-4F7A-A663-9FE3CFD5FB01" ?>
20 <?define README_Component_GUID = "B8F2F9DE-0311-436E-86A4-BEFED84968C0" ?>
21 <?define PPK_Assoc_Component_GUID = "70B4360C-7A2E-4C9E-9135-289C5467CB04" ?>
22 <?define Path_Component_GUID = "A0CFC986-489D-452B-8A8F-F9DBEF6916F4" ?>
23 <?define ProgramMenuDir_GUID = "3B2B7A2B-25F1-4EC4-987F-75BFD038632E" ?>
24 <?define Desktop_Shortcut_Component_GUID = "0A715416-EA6E-4A1C-8670-838307083EE5" ?>
26 <?define Bitness = "" ?>
27 <?define RegKeyPathLocation = "Software\SimonTatham\PuTTY" ?>
28 <?define InstallerVersion = "100" ?>
29 <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
30 <?define UpgradeCode_GUID = "DCE70C63-8808-4646-B16B-A677BD298385" ?>
31 <?define PuTTY_Component_GUID = "07ACF511-6DF6-4883-AABA-33BC14901324" ?>
32 <?define Pageant_Component_GUID = "649F963E-21C4-4755-8CE4-D80598DCEE6D" ?>
33 <?define PSFTP_Component_GUID = "3D7B9536-EC0E-4A6A-A3DF-8D285474391A" ?>
34 <?define PuTTYgen_Component_GUID = "4774F6B3-8A07-42A5-9F4D-E7FE6AA78B84" ?>
35 <?define Plink_Component_GUID = "7D96F9BB-4154-49D6-86AE-0D8F1379ACBC" ?>
36 <?define PSCP_Component_GUID = "71519D4A-3ED5-4A46-A7E4-B6E4600A8684" ?>
37 <?define HelpFile_Component_GUID = "72806A73-9D4D-49BF-8CAA-E90B0D83AEED" ?>
38 <?define Website_Component_GUID = "7DAD6536-C1A7-430C-BC8A-90176CCB78D0" ?>
39 <?define LICENCE_Component_GUID = "6AB710C0-F7A1-4B7A-AC2E-6993D6E98332" ?>
40 <?define README_Component_GUID = "0AB63F2A-0FD9-4961-B8F7-AB85C22D9986" ?>
41 <?define PPK_Assoc_Component_GUID = "13BBF036-F4C0-4F5B-9167-7BA35C673AAB" ?>
42 <?define Path_Component_GUID = "D1F68AAA-D20D-4047-828F-D0AC443FAF64" ?>
43 <?define ProgramMenuDir_GUID = "C12C3BB3-EC24-4883-8349-4AC8017C9E6A" ?>
44 <?define Desktop_Shortcut_Component_GUID = "D039E3D1-CE42-488D-96CC-90E1DE3796F8" ?>
47 <?define ProgramName = "PuTTY$(var.Bitness)" ?>
49 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
52 Product tag. The Id component is set to "*", which causes WiX to
53 make up a new GUID every time it's run, whereas UpgradeCode is
54 set to a fixed GUID. This combination allows Windows to
55 recognise each new PuTTY installer as different (because of Id)
56 versions of the same underlying thing (because of the common
59 $(var.Winver) is define on candle.exe's command line by the
60 build script, and is expected to be a dotted tuple of four
61 16-bit decimal integers (similar to a Windows VERSIONINFO
62 resource). For PuTTY's particular conventions, see comment in
66 Name="$(var.Puttytextver)$(var.Bitness)"
67 Manufacturer="Simon Tatham"
69 UpgradeCode="$(var.UpgradeCode_GUID)"
70 Language="1033" Codepage="1252" Version="$(var.Winver)">
73 We force the install scope to perMachine, largely because I
74 don't really understand how to make it usefully switchable
75 between the two. If anyone is a WiX expert and does want to
76 install PuTTY locally in a user account, I hope they'll send a
79 $(var.Puttytextver) is again defined on the candle command
80 line, and describes the version of PuTTY in human-readable
81 form, e.g. "PuTTY 0.67" or "PuTTY development snapshot [foo]".
83 <Package Id="*" Keywords="Installer"
84 Description="$(var.Puttytextver) installer"
85 Manufacturer="Simon Tatham"
86 InstallerVersion="$(var.InstallerVersion)" Languages="1033"
87 Compressed="yes" SummaryCodepage="1252"
88 InstallScope="perMachine" />
91 Permit installing an arbitrary one of these PuTTY installers
92 over the top of an existing one, whether it's an upgrade or a
93 downgrade. In particular, this makes it easy to switch between
94 trunk development snapshots and a release or prerelease, in
95 cases where you change your mind about whether you want the
96 features or the stability.
98 Setting the REINSTALLMODE property to "amus" (from its default
99 of "omus") forces every component replaced by a different
100 version of the installer to be _actually_ reinstalled; the 'o'
101 flag in the default setting breaks the downgrade case by
102 causing Windows to disallow installation of an older version
103 over the top of a newer one - and to do so _silently_, so the
104 installer claims to have worked fine but putty.exe isn't
107 <MajorUpgrade AllowDowngrades="yes" MigrateFeatures="yes" />
108 <Property Id="REINSTALLMODE" Value="amus"/>
111 <Media Id="1" Cabinet="putty.cab" EmbedCab="yes" />
114 The actual directory structure and list of 'components'
115 (individual files or shortcuts or additions to PATH) that are
118 We install directly under "Program Files\PuTTY" rather than
119 the recommended three-level pathname including a manufacturer.
120 It's bad enough that I put my name irrevocably in everyone's
121 Registry without putting it in all of their filesystems as
124 <Directory Id="TARGETDIR" Name="SourceDir">
125 <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
126 <Directory Id="INSTALLDIR" Name="PuTTY">
129 The following components all install things in the main
130 install directory (implicitly, by being nested where
131 they are in the XML structure). Most of them also put a
132 shortcut in a subdir of the Start menu, though some of
133 the more obscure things like LICENCE are just there for
134 the sake of being _somewhere_ and don't rate a shortcut.
136 <Component Id="PuTTY_Component"
137 Guid="$(var.PuTTY_Component_GUID)">
138 <File Id="PuTTY_File"
139 Source="$(var.Builddir)putty.exe" KeyPath="yes">
140 <Shortcut Id="startmenuPuTTY" Directory="ProgramMenuDir"
141 WorkingDirectory="INSTALLDIR"
142 Name="PuTTY" Advertise="no" />
145 <Component Id="Pageant_Component"
146 Guid="$(var.Pageant_Component_GUID)">
147 <File Id="Pageant_File"
148 Source="$(var.Builddir)pageant.exe" KeyPath="yes">
149 <Shortcut Id="startmenuPageant" Directory="ProgramMenuDir"
150 WorkingDirectory="INSTALLDIR"
151 Name="Pageant" Advertise="no" />
154 <Component Id="PSFTP_Component"
155 Guid="$(var.PSFTP_Component_GUID)">
156 <File Id="PSFTP_File"
157 Source="$(var.Builddir)psftp.exe" KeyPath="yes">
158 <Shortcut Id="startmenuPSFTP" Directory="ProgramMenuDir"
159 WorkingDirectory="INSTALLDIR"
160 Name="PSFTP" Advertise="no" />
163 <Component Id="PuTTYgen_Component"
164 Guid="$(var.PuTTYgen_Component_GUID)">
165 <File Id="PuTTYgen_File"
166 Source="$(var.Builddir)puttygen.exe" KeyPath="yes">
167 <Shortcut Id="startmenuPuTTYgen" Directory="ProgramMenuDir"
168 WorkingDirectory="INSTALLDIR"
169 Name="PuTTYgen" Advertise="no" />
172 <Component Id="Plink_Component"
173 Guid="$(var.Plink_Component_GUID)">
174 <File Id="Plink_File"
175 Source="$(var.Builddir)plink.exe" KeyPath="yes" />
177 <Component Id="PSCP_Component"
178 Guid="$(var.PSCP_Component_GUID)">
180 Source="$(var.Builddir)pscp.exe" KeyPath="yes" />
183 <Component Id="HelpFile_Component"
184 Guid="$(var.HelpFile_Component_GUID)">
185 <File Id="HelpFile_File"
186 Source="..\doc\putty.chm" KeyPath="yes">
187 <Shortcut Id="startmenuManual" Directory="ProgramMenuDir"
192 <Component Id="Website_Component"
193 Guid="$(var.Website_Component_GUID)">
194 <File Id="Website_File"
195 Source="website.url" KeyPath="yes">
196 <Shortcut Id="startmenuWebsite" Directory="ProgramMenuDir"
197 Name="PuTTY Web Site"
201 <Component Id="LICENCE_Component"
202 Guid="$(var.LICENCE_Component_GUID)">
203 <File Id="LICENCE_File"
204 Source="..\LICENCE" KeyPath="yes" />
206 <Component Id="README_Component"
207 Guid="$(var.README_Component_GUID)">
208 <File Id="README_File"
209 Source="README-msi.txt" Name="README.txt" KeyPath="yes" />
213 This component sets up the file associations for the
214 .ppk private key file extension: right-clicking should
215 give options to launch both Pageant and PuTTYgen with a
218 Unlike all the above components, this one also puts a
219 registry entry in HKEY_LOCAL_MACHINE, which is the 'key
220 path' for the component, i.e. the thing Windows checks
221 to know whether this component is installed. Those have
222 to be either files or registry entries; so for all the
223 above things the key paths are the actual files we
224 wanted to install, whereas for this one we have to
225 invent a spurious extra thing to be the key path.
227 <Component Id="PPK_Assoc_Component"
228 Guid="$(var.PPK_Assoc_Component_GUID)">
229 <ProgId Id="PPK_Assoc_ProgId"
230 Description="PuTTY Private Key File">
232 ContentType="application/x-putty-private-key">
233 <Verb Id="open" Command="Load into Pageant"
234 TargetFile="Pageant_File" Argument='"%1"'/>
235 <Verb Id="edit" Command="Edit with PuTTYgen"
236 TargetFile="PuTTYgen_File" Argument='"%1"' />
239 <RegistryValue Root="HKLM"
240 Key="$(var.RegKeyPathLocation)\PPKAssociation"
241 Type="string" Value="" KeyPath="yes" />
245 This component appends the install directory to PATH, so
246 that command prompt windows automatically get the
247 ability to run the command-line utilities (PSCP, PSFTP
248 and Plink, though all the others are available too if
249 you want). Again, it needs a pointless registry entry to
252 <Component Id="Path_Component"
253 Guid="$(var.Path_Component_GUID)">
254 <Environment Id="Path_Environment"
261 <RegistryValue Root="HKLM"
262 Key="$(var.RegKeyPathLocation)\PathEntry"
263 Type="string" Value="" KeyPath="yes" />
269 This component doesn't actually install anything, but it
270 arranges for the Start Menu _directory_ to be removed again
271 on uninstall. All the actual shortcuts inside the directory
272 are placed by code above here.
274 <Directory Id="ProgramMenuFolder" Name="Programs">
275 <Directory Id="ProgramMenuDir" Name="$(var.ProgramName)">
276 <Component Id="ProgramMenuDir"
277 Guid="$(var.ProgramMenuDir_GUID)">
278 <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
279 <RegistryValue Root="HKLM"
280 Key="$(var.RegKeyPathLocation)\StartMenu"
281 Type="string" Value="" KeyPath="yes" />
287 This component puts a shortcut to PuTTY itself on the
290 <Directory Id="DesktopFolder" Name="Desktop">
291 <Component Id="Desktop_Shortcut_Component"
292 Guid="$(var.Desktop_Shortcut_Component_GUID)">
293 <Shortcut Id="DesktopPuTTY"
294 WorkingDirectory="INSTALLDIR" Target="[INSTALLDIR]putty.exe"
295 Name="$(var.ProgramName)" Advertise="no" />
296 <RegistryValue Root="HKLM"
297 Key="$(var.RegKeyPathLocation)\DesktopEntry"
298 Type="string" Value="" KeyPath="yes" />
304 Detect an installation of PuTTY made by the old Inno Setup
305 installer, and refuse to run if we find one. I don't know what
306 would happen if you tried anyway, but since they install files
307 at the same pathnames, it surely wouldn't end well.
309 It could be argued that a better approach would be to actually
310 _launch_ the Inno Setup uninstaller automatically at this
311 point (prompting the user first, of course), but I'm not
312 nearly skilled enough with WiX to know how, or even if it's
315 <Property Id="LEGACYINNOSETUPINSTALLERNATIVE32PROPERTY">
317 Id="LegacyInnoSetupInstallerNative32RegSearch"
319 Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PuTTY_is1"
320 Name="QuietUninstallString" Type="raw" />
322 <Property Id="LEGACYINNOSETUPINSTALLER32ON64PROPERTY">
324 Id="LegacyInnoSetupInstaller32On64RegSearch"
326 Key="SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\PuTTY_is1"
327 Name="QuietUninstallString" Type="raw" />
329 <Condition Message="A version of PuTTY is already installed on this system using the old Inno Setup installer. Please uninstall that before running the new installer.">
330 <![CDATA[Installed OR
331 (LEGACYINNOSETUPINSTALLERNATIVE32PROPERTY = "" AND
332 LEGACYINNOSETUPINSTALLER32ON64PROPERTY = "")]]>
336 Separate the installation into 'features', which are parts of
337 the install that can be chosen separately.
339 Since PuTTY is tiny, I haven't bothered to separate the actual
340 _files_ into features; I've just put them all in a single
341 feature that's always installed. The only features that are
342 separately disableable are the auxiliary ones for desktop
343 shortcuts, .PPK file extension and modifying PATH.
345 DesktopFeature (the desktop icon) is disabled by default, on
346 the basis of not cluttering up desktops too much unless
347 someone actually wants it. The .PPK association and PATH are
348 behind-the-scenes sorts of thing, so they're on by default.
350 (The old Inno Setup installer also made it optional whether
351 PuTTY got a Start Menu subfolder. That seems to be harder in
352 WiX, because the Start Menu shortcuts are tied in to the
353 installation of the files themselves, so the Start Menu
354 subfolder is mandatory if you're using this installer at all.
355 That doesn't seem unreasonable to me - if you don't want
356 _that_, you might as well just unpack the zip file and not
357 bother with an installer at all.)
359 <Feature Id="FilesFeature" Level="1" Absent="disallow" AllowAdvertise="no"
360 Title="Install PuTTY files">
361 <ComponentRef Id="PuTTY_Component" />
362 <ComponentRef Id="Pageant_Component" />
363 <ComponentRef Id="PSFTP_Component" />
364 <ComponentRef Id="PuTTYgen_Component" />
365 <ComponentRef Id="Plink_Component" />
366 <ComponentRef Id="PSCP_Component" />
367 <ComponentRef Id="HelpFile_Component" />
368 <ComponentRef Id="Website_Component" />
369 <ComponentRef Id="LICENCE_Component" />
370 <ComponentRef Id="README_Component" />
371 <ComponentRef Id="ProgramMenuDir" />
373 <Feature Id="DesktopFeature" Level="2" Absent="allow" AllowAdvertise="no"
374 Title="Add shortcut to PuTTY on the Desktop">
375 <ComponentRef Id="Desktop_Shortcut_Component" />
377 <Feature Id="PathFeature" Level="1" Absent="allow" AllowAdvertise="no"
378 Title="Put install directory on the PATH for command prompts">
379 <ComponentRef Id="Path_Component" />
381 <Feature Id="PPKFeature" Level="1" Absent="allow" AllowAdvertise="no"
382 Title="Associate .PPK files with PuTTYgen and Pageant">
383 <ComponentRef Id="PPK_Assoc_Component" />
387 Installer user interface.
389 WiX provides several pre-cooked UIs, but annoyingly, every
390 single one of them has the wrong combination of features for
391 what I want. For example, WixUI_InstallDir lets me select the
392 install directory, but not the feature set. WixUI_Advanced
393 lets me select both, but also insists on giving me the option
394 of per-user vs systemwide install (and I haven't managed to
395 get per-user to behave sensibly). And _most_ of them insist on
396 having a click-through EULA page in the interface, which I
397 absolutely don't want - the MIT licence does not need to be
398 presented as a EULA at all (if you didn't accept it in your
399 mind you had no business copying the software in the first
400 place, and it's not imposing any scary restrictions anyway).
402 So what we see below is my own sequence of UI dialogs, all
403 included by reference from the WiX standard set. It's probably
404 most similar to WixUI_InstallDir, but I've removed LicenseDlg
405 and included FeaturesDlg.
407 (I'm not actually sure that FeaturesDlg is all that good a fit
408 for this particular project, with a treeview control that
409 doesn't really get used as a tree, and inappropriate wording
410 in the dropdown you use to select or deselect features.
411 Perhaps in future I might replace it with a simpler dialog box
412 containing a checkbox for each of the desktop shortcut, the
413 PATH addition and the PPK associations.)
415 <UIRef Id="WixUI_Common" />
418 <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
419 <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
420 <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
422 <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
423 <Property Id="WixUI_Mode" Value="InstallDir" />
425 <DialogRef Id="BrowseDlg" />
426 <DialogRef Id="DiskCostDlg" />
427 <DialogRef Id="ErrorDlg" />
428 <DialogRef Id="FatalError" />
429 <DialogRef Id="FilesInUse" />
430 <DialogRef Id="MsiRMFilesInUse" />
431 <DialogRef Id="PrepareDlg" />
432 <DialogRef Id="ProgressDlg" />
433 <DialogRef Id="ResumeDlg" />
434 <DialogRef Id="UserExit" />
435 <DialogRef Id="FeaturesDlg" />
437 <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
438 <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
440 <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
442 <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">NOT Installed</Publish>
443 <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="FeaturesDlg">Installed</Publish>
445 <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
446 <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
447 <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
448 <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
449 <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="FeaturesDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
450 <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
451 <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
453 <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">Installed</Publish>
454 <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg">NOT Installed</Publish>
455 <Publish Dialog="FeaturesDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
457 <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
458 <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
459 <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
461 <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
463 <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
464 <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
465 <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
467 <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction"
468 Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
471 This ARPNOMODIFY flag prohibits changing the set of
472 installed features, which would otherwise be possible by
473 reactivating the same MSI (from its original disk file, or
474 in Add/Remove Programs, or I think also by GUID on the
475 msiexec command line) and selecting 'Change' from the
476 maintenance-type dialog.
478 The reason I've prohibited it is because I couldn't get it
479 to *work* in my initial testing - it would look as if it had
480 done the right thing, but in fact the features it should
481 have removed would still be there after the installer
482 finished running. So if any WiX expert can help me fix this,
483 I'd love to take this flag out and make the installation
484 retrospectively modifiable!
486 (As well as removing this flag and fixing whatever the
487 problem is, I'd also have to add a line in the above set of
488 Publish tags which points MaintenanceTypeDlg's ChangeButton
491 <Property Id="ARPNOMODIFY" Value="1" />
495 Offer to display README after installation.
497 <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT"
498 Value="View README file" />
499 <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
500 <Property Id="WixShellExecTarget" Value="[#README_File]" />
501 <CustomAction Id="LaunchApplication" BinaryKey="WixCA"
502 DllEntry="WixShellExec" Impersonate="yes" />
504 <!-- Glue: tell the install dir part of the UI what id my actual
505 install dir is known by. Otherwise the former won't know how
506 to alter the setting of the latter. -->
507 <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
510 Include my custom installer artwork, created in Buildscr.
512 <WixVariable Id="WixUIDialogBmp" Value="msidialog.bmp" />
513 <WixVariable Id="WixUIBannerBmp" Value="msibanner.bmp" />
516 Set the icon that will show up in Add/Remove Programs.
518 http://www.codeproject.com/Articles/43564/WiX-Tricks says that
519 for some weird reason the Id of this icon has to end in .exe.
521 <Icon Id="installericon.exe" SourceFile="puttyins.ico" />
522 <Property Id="ARPPRODUCTICON" Value="installericon.exe" />