OSDN Git Service

WinMerge Alpha.iss is a newer version of WinMerge.iss that SHOULDN'T be used for...
authorChristian Blackburn <seier@users.sourceforge.net>
Wed, 17 Mar 2004 04:38:51 +0000 (04:38 +0000)
committerChristian Blackburn <seier@users.sourceforge.net>
Wed, 17 Mar 2004 04:38:51 +0000 (04:38 +0000)
-Seier Blackburn

Installer/InnoSetup/WinMerge Alpha.iss [new file with mode: 0755]

diff --git a/Installer/InnoSetup/WinMerge Alpha.iss b/Installer/InnoSetup/WinMerge Alpha.iss
new file mode 100755 (executable)
index 0000000..f261cec
--- /dev/null
@@ -0,0 +1,955 @@
+; RCS ID line follows -- this is updated by CVS
+; $Id$
+;
+;           Programmed by:  Christian Blackburn and Christian List
+;                 Purpose:  The is the Inno Setup installation script for distributing our WinmMerge application.
+; Tools Needed To Compile:  Inno Setup 4.18+ (http://www.jrsoftware.org/isdl.php), Inno Setup QuickStart Pack 4.18+(http://www.jrsoftware.org/isdl.php)
+;                           note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function
+;Directly Dependant Files:  Because this is an installer. It would be difficult to list and maintain each of the files referenced
+;                           throughout the script in the header.  If you search this plain text script for a particular file in our CVS and it
+;                           doesn't appear then this script is not directly dependant on that file.
+;Compilation Instructions:  1.  Open this file in Inno Setup or ISTool
+;                           2.  Make sure Compression=7Zip/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during
+;                               development to speed up compilation, however at release we want the intaller to be as strong as possible.
+;                           3.  Compile the script:
+;                                   -From Inno Setup "Click "Build" --> "Compile"
+;                                   -From ISTool Click "Project" --> "Compile Setup"
+;                           4.  The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.
+;
+;Installer Todo List:
+; #  Automatically detect and configure WinMerge to work with Visual Source Safe
+; #  Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL
+; #  Add a Desktop.ini
+; #  Test and distribute the files contained within "MergePlugins (From 2140).7z" or in the folder MergePlugins of "WinMerge2140-exe.7z"
+;    Also take a look at this folder and see if there are any more we should be including WinMerge\Plugins
+; #  Bundle 7-Zip with WinMerge or provide on the fly download capability.
+; #  Automatically detect the user's locale, select, and install that language and the registry settings that would make that language be
+;     the language on startup.
+; #  Evaluate current default settings in WinMerge and bug those that don't make sense
+; #  Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)
+; #  Add WinMerge is running would you like to close it now support with programmatic termination
+;     -Note: I tried this with ISX and the extensions are innadequate I will have to use AutoIt 3.X instead
+; #  Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)
+; #   Make an uninstall icon and use it: UninstallIconFile=..\src\res\Merge.ico
+; #  Make a Floppy Disk /Low Bandwidth Edition of the WinMerge Installer that doesn't include outdated (3.11, 3.12) 7-Zip Support or the Language files
+;     If the user requires any of these we'll download it on the fly.  (maybe that should be the default behavior from the get go?)
+; #  We need to look in the registry and (HKLM\...\Uninstall\Winmerge_is1) determine what the previous start
+;     menu location was so that we can remove it if the user chooses to install to a different location.
+; #  Determine whether NT 3.51 with a 3.0 or higher version of IE can run our application I don't want the system requirements
+;     in \Docs\Read Me.RTF to be inaccurate.
+; #
+; #  Create two info pages during installation one for our Contributors and a second one for our Read Me file.
+;     If this isn't possible then we'll need to use ISPP and somehow programatically combine the two RTF files prior to compilation.
+; #  While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?
+; #  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
+;    once the ShellExtension.dll file has been added or removed.   Tell Kimmo to re-write to detect path from HKLM.
+; #  Be dilegent about getting a higher resolution copy of the Users's Guide.ico source art from somebody
+; #  If the user happens to have Syn Text Editor installed then we'll make that the default text editor rather than notepad.
+; #  Set the order of icons within the start menu (we'll have to use a registry hack since Inno Setup doesn't yet have this level of granularity).
+; #  Create a switch for the installer to unzip all of the included binaries as if it were a zip file.
+; #  Perry wanted a Select All button to appear on the components page.  Let's just ask Jordan Russell or Martijn Laan if they'll do it :).
+
+
+
+
+#define AppVersion GetFileVersion(SourcePath + "\..\Build\MergeRelease\WinMerge.exe")
+#define FriendlyAppVersion Copy(GetFileVersion(SourcePath + "\..\Build\MergeRelease\WinMerge.exe"), 1, 5)
+
+[Setup]
+AppName=WinMerge
+AppVerName=WinMerge {#AppVersion}
+AppPublisher=Thingamahoochie Software
+AppPublisherURL=http://WinMerge.org/
+AppSupportURL=http://WinMerge.org/
+AppUpdatesURL=http://WinMerge.org/
+
+;This is in case an older version of the installer happened to be
+DirExistsWarning=No
+
+;This requires IS Pack 4.18(full install).  Once installed you must compile using ISTool, not Inno Setup directly.
+AppVersion={#AppVersion}
+
+DefaultDirName={pf}\WinMerge
+DefaultGroupName=WinMerge
+DisableStartupPrompt=yes
+AllowNoIcons=yes
+LicenseFile=..\src\COPYING
+InfoBeforeFile=..\Docs\Users\Read Me.rtf
+OutputBaseFilename=WinMerge {#AppVersion}
+
+;This must be admin to install C++ Runtimes
+PrivilegesRequired=admin
+
+UninstallDisplayIcon={app}\{code:ExeName}
+
+;File Version Info
+VersionInfoVersion={#AppVersion}
+
+;Artwork References
+WizardImageFile=Art\Large Logo.rle
+WizardSmallImageFile=Art\Small Logo.rle
+WizardImageStretch=No
+
+SetupIconFile=..\src\res\Merge.ico
+
+;The uninstall icon shouldn't match the WinMerge icon, because it would look confusing in the start menu.
+;  So I've remmed this until someone (probably me [Seier Blackburn]) creates a decent WinMerge specific uninstall icon
+;UninstallIconFile=..\src\res\Merge.ico
+
+;Compression Parameters
+;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max
+;they also require 320 MB RAM for compression, if you're system has more than than in RAM then by all
+;means set it to ultra before compilation
+Compression=none
+InternalCompressLevel=fast
+SolidCompression=false
+
+[Messages]
+FinishedLabel=Setup has finished installing [Name] on your computer.
+SetupAppTitle=Setup - WinMerge {#AppVersion}
+
+
+[Tasks]
+Name: ShellExtension; Description: &Enable Explorer context menu integration; GroupDescription: Optional Features:
+Name: desktopicon; Description: Create a &Desktop icon; GroupDescription: Additional icons:; Flags: unchecked
+Name: quicklaunchicon; Description: Create a &Quick Launch icon; GroupDescription: Additional icons:
+
+
+[Components]
+Name: main; Description: WinMerge Core Files; Types: full compact custom; Flags: fixed
+Name: docs; Description: User's Guide; Types: full
+Name: filters; Description: Filters; Types: full
+
+;Non-English Languages are no longer a default part of a normal installation.  If a user selected a language as part of their last installation
+;that language will be selected automatically during subsequent installs.
+Name: Catalan_Language; Description: Catalan; Flags: disablenouninstallwarning
+Name: ChineseSimplified_Language; Description: Chinese (Simplified) menus and dialogs; Flags: disablenouninstallwarning
+Name: ChineseTraditional_Language; Description: Chinese (Traditional) menus and dialogs; Flags: disablenouninstallwarning
+Name: Czeck_Language; Description: Czech menus and dialogs; Flags: disablenouninstallwarning
+Name: Danish_Language; Description: Danish menus and dialogs; Flags: disablenouninstallwarning
+Name: Dutch_Language; Description: Dutch menus and dialogs; Flags: disablenouninstallwarning
+Name: French_Language; Description: French menus and dialogs; Flags: disablenouninstallwarning
+Name: German_Language; Description: German menus and dialogs; Flags: disablenouninstallwarning
+Name: Italian_Language; Description: Italian menus and dialogs; Flags: disablenouninstallwarning
+Name: Korean_Language; Description: Korean menus and dialogs; Flags: disablenouninstallwarning
+Name: Norwegian_Language; Description: Norwegian menus and dialogs; Flags: disablenouninstallwarning
+Name: Polish_Language; Description: Polish menus and dialogs; Flags: disablenouninstallwarning
+Name: Brazilian_Language; Description: Portuguese (Brazilian) menus and dialogs; Flags: disablenouninstallwarning
+Name: Russian_Language; Description: Russian menus and dialogs; Flags: disablenouninstallwarning
+Name: Slovak_Language; Description: Slovak menus and dialogs; Flags: disablenouninstallwarning
+Name: Spanish_Language; Description: Spanish menus and dialogs; Flags: disablenouninstallwarning
+Name: Swedish_Language; Description: Spanish menus and dialogs; Flags: disablenouninstallwarning
+
+[InstallDelete]
+;Experimental Versions 2.1.5.10 - WinMerge.2.1.5.13 shipped with the default behavior of creating a folder by the same name
+; just in case the user was a bozo and left behind that folder we'll go ahead and check for it and delete them as they occurr
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.0-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.1-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.2-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.3-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.4-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.5-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.6-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.7-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.8-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.9-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.10-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.11-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.12-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge.2.1.5.13-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge2140-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge2154-exe
+
+;Deletes the following folder and all its contents during installation
+Type: filesandordirs; Name: {app}\WinMerge2158-exe
+
+; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.
+Type: files; Name: {app}\Diff.txt
+
+; A few users might have some intermediate Chinese translations on their machines (from version 2.0.0.2),
+;we just delete those to be nice.
+Type: files; Name: {app}\MergeChineseSimplifiedGB2312.lang
+Type: files; Name: {app}\MergeChineseTraditionalBIG5.lang
+
+;All of these files are removed so if the user upgrades their operating system or changes their language selections only the
+;necessary files will be left in the installation folder
+;Another reason these files might be strays is if a user extracted one of the experimental builds such as:
+;WinMerge.{#AppVersion}-exe.7z.
+Name: {app}\WinMerge.exe; Type: files
+Name: {app}\WinMergeU.exe; Type: files
+
+Name: {app}\Merge7z311.dll; Type: files
+Name: {app}\Merge7z311U.dll; Type: files
+
+Name: {app}\Merge7z312.dll; Type: files
+Name: {app}\Merge7z312U.dll; Type: files
+
+Name: {app}\Merge7z313.dll; Type: files
+Name: {app}\Merge7z313U.dll; Type: files
+
+Name: {app}\ShellExtension.dll; Type: files
+
+Name: {app}\MergeBrazilian_Language.lang; Type: files
+Name: {app}\MergeCatalan.lang; Type: files
+Name: {app}\MergeChineseSimplified.lang; Type: files
+Name: {app}\MergeChineseTraditional.lang; Type: files
+Name: {app}\MergeCzech.lang; Type: files
+Name: {app}\MergeDanish.lang; Type: files
+Name: {app}\MergeDutch.lang; Type: files
+Name: {app}\MergeFrench.lang; Type: files
+Name: {app}\MergeGerman.lang; Type: files
+Name: {app}\MergeItalian.lang; Type: files
+Name: {app}\MergeKorean.lang; Type: files
+Name: {app}\MergeNorwegian.lang; Type: files
+Name: {app}\MergePolish.lang; Type: files
+Name: {app}\MergeSlovak.lang; Type: files
+Name: {app}\MergeSpanish.lang; Type: files
+Name: {app}\MergeRussian.lang; Type: files
+Name: {app}\MergeSwedish.lang; Type: files
+
+
+
+Name: {app}\Read Me.rtf; Type: files
+Name: {app}\Contributors.rtf; Type: files
+
+;Removes the previous start menu items and group in case the user chooses to install to a new start menu location next time
+Name: {commonstartmenu}\Programs\WinMerge\WinMerge.lnk; Type: files
+Name: {commonstartmenu}\Programs\WinMerge\Uninstall WinMerge.lnk; Type: files
+Name: {commonstartmenu}\Programs\WinMerge\WinMerge on the Web.lnk; Type: files
+Name: {commonstartmenu}\Programs\WinMerge\User's Guide.lnk; Type: files
+Name: {commonstartmenu}\Programs\WinMerge\Read Me.lnk; Type: files
+Name: {commonstartmenu}\Programs\WinMerge; Type: dirifempty
+
+Name: {group}\WinMerge.lnk; Type: files
+Name: {group}\Uninstall WinMerge.lnk; Type: files
+Name: {group}\WinMerge on the Web.lnk; Type: files
+Name: {group}\Read Me.lnk; Type: files
+Name: {group}\User's Guide.lnk; Type: files
+Name: {group}; Type: dirifempty
+
+;This removes the quick launch icon in case the user chooses not to install it after previously having it installed
+Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files
+
+;This removes the desktop icon in case the user chooses not to install it after previously having it installed
+Name: {userdesktop}\WinMerge.lnk; Type: files
+
+Name: {app}\Docs; Type: filesandordirs
+
+[Files]
+;The MinVersion forces Inno Setup to only copy the following file if the user is running a WinNT platform system
+Source: ..\Build\MergeUnicodeRelease\WinMergeU.exe; DestDir: {app}; MinVersion: 0, 4; Components: main; Flags: ignoreversion
+
+;The MinVersion forces Inno Setup to only copy the following file if the user is running Win9X platform system
+Source: ..\Build\MergeRelease\WinMerge.exe; DestDir: {app}; MinVersion: 4, 0; Components: main; Flags: ignoreversion
+
+;Installs the ComCtl32.dll update on any system where its DLLs are more recent
+Source: Runtimes\50comupd.exe; DestDir: {tmp}; Check: InstallComCtlUpdate
+
+; begin VC system files
+Source: Runtimes\mfc42.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall regserver sharedfile
+Source: Runtimes\mfc42u.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall regserver sharedfile; MinVersion: 0, 4
+Source: Runtimes\msvcrt.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall sharedfile
+Source: Runtimes\OleAut32.dll; DestDir: {sys}; Flags: restartreplace uninsneveruninstall regserver sharedfile
+; end VC system files
+
+Source: ..\ShellExtension\ShellExtension.dll; DestDir: {app}; Flags: regserver uninsrestartdelete
+
+;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version
+Source: ..\Build\MergeUnicodeRelease\Merge7z313U.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 0, 4; Check: Install7ZipDll(313)
+Source: ..\Build\MergeUnicodeRelease\Merge7z312U.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 0, 4; Check: Install7ZipDll(312)
+Source: ..\Build\MergeUnicodeRelease\Merge7z311U.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 0, 4; Check: Install7ZipDll(311)
+
+Source: ..\Build\MergeRelease\Merge7z313.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 4, 0; Check: Install7ZipDll(313)
+Source: ..\Build\MergeRelease\Merge7z312.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 4, 0; Check: Install7ZipDll(312)
+Source: ..\Build\MergeRelease\Merge7z311.dll; DestDir: {app}; Flags: ignoreversion; MinVersion: 4, 0; Check: Install7ZipDll(311)
+
+Source: ..\Languages\DLL\MergeBrazilian.lang; DestDir: {app}; Components: Brazilian_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeCatalan.lang; DestDir: {app}; Components: Catalan_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeChineseSimplified.lang; DestDir: {app}; Components: ChineseSimplified_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeChineseTraditional.lang; DestDir: {app}; Components: ChineseTraditional_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeCzech.lang; DestDir: {app}; Components: Czeck_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeDanish.lang; DestDir: {app}; Components: Danish_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeDutch.lang; DestDir: {app}; Components: Dutch_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeFrench.lang; DestDir: {app}; Components: French_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeGerman.lang; DestDir: {app}; Components: German_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeItalian.lang; DestDir: {app}; Components: Italian_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeKorean.lang; DestDir: {app}; Components: Korean_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeNorwegian.lang; DestDir: {app}; Components: Norwegian_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergePolish.lang; DestDir: {app}; Components: Polish_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeRussian.lang; DestDir: {app}; Components: Russian_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeSlovak.lang; DestDir: {app}; Components: Slovak_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeSpanish.lang; DestDir: {app}; Components: Spanish_Language; Flags: ignoreversion
+Source: ..\Languages\DLL\MergeSwedish.lang; DestDir: {app}; Components: Spanish_Language; Flags: ignoreversion
+
+
+Source: ..\Docs\Users\UsersGuide\*.*; DestDir: {app}\Docs\User's Guide\; Components: docs; Flags: ignoreversion sortfilesbyextension
+Source: ..\Docs\Users\UsersGuide\Art\*.*; DestDir: {app}\Docs\User's Guide\Art; Components: docs; Flags: ignoreversion sortfilesbyextension
+Source: ..\Filters\*.*; DestDir: {app}\Filters; Components: filters; Flags: ignoreversion sortfilesbyextension
+
+;Documentation
+Source: ..\Docs\Users\Read Me.rtf; DestDir: {app}\Docs; Components: main; Flags: ignoreversion
+Source: ..\Docs\Users\Contributors.rtf; DestDir: {app}\Docs; Components: main; Flags: ignoreversion
+
+
+[INI]
+Filename: {app}\WinMerge.url; Section: InternetShortcut; Key: URL; String: http://WinMerge.org/
+
+
+[Icons]
+;Start Menu Icons
+Name: {group}\WinMerge; Filename: {app}\{code:ExeName}; HotKey: Ctrl+Alt+M
+Name: {group}\Read Me; Filename: {app}\Docs\Read Me.rtf; IconFileName: {win}\NOTEPAD.EXE
+Name: {group}\User's Guide; Filename: {app}\Docs\User's Guide\Index.html; IconFileName: {app}\Docs\User's Guide\Art\User's Guide.ico; Components: docs
+Name: {group}\WinMerge on the Web; Filename: {app}\WinMerge.url
+Name: {group}\Uninstall WinMerge; Filename: {uninstallexe}
+
+;Desktop Icon
+Name: {userdesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon
+
+;Quick Launch Icon
+Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon
+
+
+[Registry]
+Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font
+
+; Set the default font to Courier New size 12
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: string; ValueName: FaceName; ValueData: Courier New
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Specified; ValueData: 1
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Height; ValueData: $fffffff0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Width; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Escapement; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Orientation; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Weight; ValueData: $190
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Italic; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Underline; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: StrikeOut; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: CharSet; ValueData: 0
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: OutPrecision; ValueData: 3
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: ClipPrecision; ValueData: 2
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: Quality; ValueData: 1
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Font; ValueType: dword; ValueName: PitchAndFamily; ValueData: $31
+
+; delete obsolete values
+;In Inno Setup Version 4.18 ValueData couldn't be null and compile,
+;if this is fixed in a later version feel free to remove the parameter
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue
+Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue
+
+Root: HKCR; SubKey: Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror
+Root: HKCR; SubKey: Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror
+
+;Adds "Start Menu" --> "Run" Support for WinMerge
+Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey
+Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey
+Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}
+Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}
+
+;Registry Keys for use by ShellExtension.dll
+Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\{code:ExeName}
+
+;Enables or disables the Context Menu preference based on what the user selects during install
+;Initially the Context menu is explicitly disabled:
+Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0
+
+;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.
+Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension
+
+;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application
+Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}
+Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001
+
+
+Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge\Settings; ValueType: dword; ValueName: VersionSystem; ValueData: {code:SourceControlAppInt}
+Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge\Settings; ValueType: string; ValueName: VssPath; ValueData: {code:SourceControlAppPath}
+
+[Run]
+;Installs the Microsoft Common Controls Update
+Filename: {tmp}\50comupd.exe; Parameters: /r:n /q:1; StatusMsg: Updating the System's Common Controls; Check: InstallComCtlUpdate
+
+;This will no longer appear unless the user chose to make a start menu group in the first place
+Filename: {win}\Explorer.exe; Description: &View the WinMerge Start Menu Folder; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent; Check: GroupCreated
+
+Filename: {app}\{code:ExeName}; Description: &Launch WinMerge; Flags: nowait postinstall skipifsilent runmaximized
+
+
+[UninstallDelete]
+Type: files; Name: {app}\WinMerge.url
+Type: dirifempty; Name: {app}
+
+[Code]
+Var
+    {Stores the version of 7-Zip Installed}
+    int7Zip_Version: Integer;
+
+    {Determines two things whether or not ComCtrl is needed and whether or not we've already checked}
+    intComCtlNeeded: Integer;
+
+    {Stores the path to Visual Source Safe}
+    strSS_Path: string;
+
+
+
+{Determines whether or not the user chose to create a start menu}
+Function GroupCreated(): boolean;
+Var
+    {Stores the path of the start menu group Inno Setup may have created}
+    strGroup_Path: string;
+Begin
+    {Saves the path that Inno Setup intended to create the start menu group at}
+    strGroup_Path := ExpandConstant('{group}');
+
+    {If the start menu path isn't blank then..}
+    if strGroup_Path <> '' Then
+        Begin
+            {If the user choose to create the start menu then this folder will exist.
+            If the folder exists then GroupCreated = True otherwise it does not.}
+            Result := DirExists(strGroup_Path)
+        end
+    else
+        {Since the start menu path is null, we know that the user chose not to create a
+        start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}
+        Result := False;
+
+     {Debug
+
+    If DirExists(strGroup_Path) = True Then
+        Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)
+    Else
+        Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }
+End;
+
+
+{Returns the appropriate name of the .EXE being installed}
+Function ExeName(Unused: string): string;
+Begin
+
+  If UsingWinNT() = True Then
+        Result := 'WinMergeU.exe'
+  Else
+    Result := 'WinMerge.exe';
+End;
+
+Function FixVersion(strInput: string): string;
+{Returns a version with four segments A.B.C.D}
+Var
+  {Stores the number of periods found within the version string}
+  intPeriods: integer;
+
+  {Creates a counter}
+  i: integer;
+
+  {Generates the string to be returned to the user}
+  strVersion: string;
+Begin
+
+  {Creates a copy of the input string before we tear it apart}
+  strVersion := strInput;
+
+  {Until strInput is empty do..}
+  While Length(strInput) > 0 do
+    Begin
+      {if the first character of the input string is a period then}
+      If Copy(strInput, 1, 1) = '.' Then
+
+        {Incriment the number of periods found}
+        intPeriods := intPeriods + 1;
+
+      {Remove the first character from the Input string}
+      strInput := Copy(strINput, 2, length(strINput));
+    End;
+
+  {For every period shy of 3 do..}
+  For i := 1 to 3 - intperiods do
+
+    {Add a '.0' to the version string}
+    strVersion := strVersion + '.0';
+
+  {Returns the Version string with the correct number of segments}
+  Result := strVersion;
+
+End;
+
+Function RemoveLeadingZeros(strInput: string): string;
+{Removes the leading zeros if any from a numeric string}
+Begin
+
+  {While the first character of the string is a zero}
+  While Copy(strInput, 1, 1) = '0' Do
+    begin
+
+    {Removes one leading zero from the input string}
+      strInput := Copy(strInput, 2, Length(strINput));
+    end;
+
+  {Returns the formatted string}
+  Result := strInput;
+
+End;
+
+
+{Returns whether or not the version string detected is meets the version number requirement}
+Function VersionAtLeast(strVersion_Installed: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;
+Var
+
+  {Stores the Major of the Version installed (X.0.0.0)}
+  intMajor_Installed: Integer;
+
+  {Stores the Minor of the Version installed (1.X.0.0)}
+  intMinor_Installed: Integer;
+
+  {Stores the Revision of the Version installed (1.0.X.0)}
+  intRevision_Installed: Integer;
+
+  {Stores the Revision of the Version installed (1.0.0.X)}
+  intBuild_Installed: Integer;
+
+  {Stores the last valid character of a particular segment (Major, Minor, Revision) of the Version string}
+  intEnd_Pos: Integer;
+
+begin
+  {Debug
+  Msgbox('The version installed is ' + strVersion_Installed + ' and the required version is ' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild), mbINformation, mb_OK)
+        }
+
+  {Makes sure the version string contains four numberic segments 5.2 ---> 5.2.0.0}
+  strVersion_Installed := FixVersion(strVersion_Installed);
+
+  {If the version number is empty then quit the function}
+  if strVersion_Installed = '' Then
+    begin
+      Result := False;
+
+      {Stops analyzing the version installed and returns that the version installed was inadequate}
+      exit;
+    end;
+
+  {Starts detecting the Major value of the Version Installed}
+
+  {Sets the end position equal to one character before the first period in the version number}
+  intEnd_Pos := Pos('.', strVersion_Installed) -1
+
+  {Sets the major version equal to all character before the first period }
+  intMajor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);
+
+  {Debug
+  msgbox('The Major version installed is ' + IntToStr(intMajor_installed) + ' and the required Major is ' + IntToStr(intMajor) + '.', mbInformation, MB_OK)
+        }
+
+  {If the Major Version Installed is greater than the required value then...}
+  if intMajor_Installed > intMajor Then
+    begin
+      {Returns that the version number was adequate, since it actually exceeded the requirement}
+      Result := True;
+
+        {Debug
+        msgbox(IntToStr(intMajor_installed) + ' > ' +  IntToStr(intMajor), mbInformation, MB_OK)
+        }
+
+      {Stops analyzing the version number since we already know it met the requirement}
+      exit;
+    end;
+
+  {If the Major version installed is less than the requirement then...}
+  If intMajor_Installed < intMajor Then
+    begin
+      {Debug
+       msgbox(IntToStr(intMajor_installed) + ' < ' +  IntToStr(intMajor), mbInformation, MB_OK)
+       }
+
+      Result := False;
+
+      {Stops analyzing the version number since we already know it's inadequate and returns False (inadequate)}
+      exit;
+    end
+
+
+  {Starts detecting the Minor version of the Version Installed}
+
+  {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Major Version)}
+  strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
+
+  {Sets the end position equal to one character before the first period in the version number}
+  intEnd_Pos := Pos('.', strVersion_Installed) -1
+
+  {Sets the Minor version equal to all character before the first period }
+       intMinor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0)
+
+       {Debug
+  msgbox('The Minor version installed is ' + IntToStr(intMinor_installed) + ' and the required Minor is ' + IntToStr(intMinor) + '.', mbInformation, MB_OK)
+        }
+
+       {If the Minor Version Installed is greater than the required value then...}
+       If intMinor_Installed > intMinor Then
+    begin
+      {Returns that the version number was adequate}
+      Result := True;
+
+      {Stops further analyzation of the version number}
+      exit
+    end;
+
+  {If the minor installed is less than what was required}
+  If intMinor_Installed < intMinor Then
+    Begin
+      Result := False;
+
+      {Returns that the version installed did not meet the required value and stops analyzing the version number}
+      exit;
+    end;
+
+
+  {Starts Detecting the Revision of the Version Installed}
+
+       {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Minor Version)}
+       strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
+
+       {Sets the last character of the Revision to last character before the first period}
+       intEnd_Pos := Pos('.', strVersion_Installed) -1
+
+       {Sets the Revision Installed equal to everything before the first period}
+       intRevision_Installed := strToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);
+
+       {Debug
+  msgbox('The Revision version installed is ' + IntToStr(intRevision_installed) + ' and the required Revision is ' + IntToStr(intRevision) + '.', mbInformation, MB_OK)
+        }
+
+       {If the Revision Installed is greater than the required value then...}
+  If intRevision_Installed > intRevision Then
+    begin
+      {Return that the version installed was adequate}
+      Result := True;
+
+      {Stops further analyzation of the version number}
+      exit
+    end;
+
+  {If the revision installed did not meet the requirement then...}
+  If intRevision_Installed < intRevision Then
+    begin
+      Result := False;
+
+    {Return that the version number failed to meet the requirement and stops further analyzation of the version number}
+      exit;
+    end;
+
+  {Start Detection the Build Installed}
+
+       {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Revision) leaving behind only the build number}
+       strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));
+
+       {Set the build installed = to what's left of the strVersion_Installed text}
+       intBuild_installed := strToIntDef(RemoveLeadingZeros(strVersion_Installed), 0);
+
+       {Debug
+  msgbox('The Build version installed is ' + IntToStr(intBuild_installed) + ' and the required Build is ' + IntToStr(intBuild) + '.', mbInformation, MB_OK)
+        }
+
+       {If the build installed is greater than or equal to the requirement then...}
+       if intBuild_installed >= intBuild Then
+
+        {Report that the version installed was adequate}
+    Result := True
+  else
+
+    {Reports the inadequacy of the version installed and seases processing }
+    Result := False;
+end;
+
+{Returns whether or not the version of particular file is at least equal to requested value}
+Function FileVersionAtLeast(strFile_Path: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;
+  Var
+  {Stores the version of the file to be compared}
+  strVersion: string;
+Begin
+  {Gets the version number of the specified file}
+  GetVersionNumbersString(strFile_Path, strVersion)
+
+  {File Version at least is the result of the VersionAtLeast Determination}
+  Result := VersionAtLeast(strVersion, intMajor, intMinor, intRevision, intBuild);
+
+
+  {Debug: If you'd like to debug with a messagebox then un rem this
+       If Result = True then
+
+        Msgbox('The version of ' + strFile_path + ' required is "' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild) + '". The version found was "'  + strVersion + '.  The version detected met the required value.', mbInformation, MB_OK)
+       else
+        Msgbox('The version of ' + strFile_path + ' required is "' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild) + '". The version found was "' + strVersion + '.  The version detected did not meet the required value.', mbInformation, MB_OK);
+    }
+end;
+
+function Install7ZipDll(strDLL_Version: string): Boolean;
+Var
+    {Stores the file path of the 7-Zip File Manager Program}
+    str7Zip_Path: String;
+
+    {Stores the version of 7-Zip Installed}
+    str7Zip_Version: String;
+
+    {Stores the DLL's Version Function Input Parameter in integer format}
+    intDLL_Version: Integer;
+
+    {Stores the installation location of Visual Source Safe}
+    strSS_Path: string;
+Begin
+
+    {If the actual version of 7-Zip Installed hasn't been determined yet then...}
+    If int7Zip_Version = 0 Then
+        Begin
+              {Detects the install location of 7-Zip from the registry, if it's installed}
+              RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe', '', str7Zip_Path)
+
+               {If there is 7-Zip information in the registry then...}
+                       If length(str7Zip_Path) > 0 Then
+                               begin
+                                   {If the 7zFM.exe file exists then...}
+                                   If FileExists(str7Zip_Path) = True Then
+                                       Begin
+                                                       {Detects the version of the 7-Zip Installed}
+                                                       GetVersionNumbersString(str7Zip_Path, str7Zip_Version)
+
+
+
+                                           {If the version of 7-Zip Installed is at least 3.11 Then...}
+                                           If VersionAtLeast(str7Zip_Version, 3, 11, 0, 0) = True Then
+                                               begin
+                                                   {If the user has 3.12 or higher installed then...}
+                                                   If VersionAtLeast(str7Zip_Version, 3, 12, 0, 0) = True Then
+                                        Begin
+                                                           {If the user has 3.13 or higher installed then...}
+                                                           If VersionAtLeast(str7Zip_Version, 3, 13, 0, 0) = True Then
+
+                                                               {We record the version of 7-Zip installed as 3.13 regardless of whether or not it's actually 3.14, 3.15, etc..}
+                                                               int7Zip_Version := 313
+
+                                                           Else
+
+                                                               {Since it was at least 3.12, but not 3.13 then it must be 3.12}
+                                                               int7Zip_Version := 312;
+
+                                                       end
+                                                   Else
+                                                           {Since it was at least 3.11, but not 3.12 then it must be 3.11}
+                                                           int7Zip_Version := 311;
+                                               end;
+                        End
+                                   Else
+                                      {Records that the 7-Zip program didn't exist for the rest of the installation}
+                                       int7Zip_Version := -1;
+                               end
+                       Else
+                               {Records that the 7-Zip program wasn't installed for rest of the installation}
+                               int7Zip_Version := -1;
+           end;
+
+    {Converts the DLL Version String to an Integer for numeric evaluation}
+    intDLL_Version := StrToInt(strDLL_Version);
+
+       {If 7-Zip either wasn't installed or was of inadequate version then...}
+       If int7Zip_Version = -1 Then
+               Begin
+                       {If the program is trying to determine if the 313 DLL should be installed then the answer is yes
+                       we install this, because it's the most recent version and if they were to install 7-zip this
+                       would be the version they'd want (since people generally install the latest and greatest)}
+                       if intDLL_Version = 313 Then
+                               Result := True
+
+                       {If the program is trying to install anything, but 313 on a system without 7-Zip
+                       then we disallow the installation of that DLL}
+                       else
+                               Result := False;
+               End
+
+       {If the version of 7-Zip was sufficient then...}
+       Else
+               Begin
+                       {if the version the program is trying to install matches the version installed on the clients system then...}
+                       If int7Zip_Version = intDLL_Version Then
+                               Result := True
+
+                       {If the program is trying to install the 31X DLL on a 31Y system then we won't allow the file to be copied...}
+            else
+                               Result := False;
+               End;
+
+    {Debug:
+    If UsingWinNT = True Then
+        begin
+            If Result = True Then
+                Msgbox('We''re are installing Merge7z' + strDLL_Version + 'U.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok)
+            Else
+                Msgbox('We''re aren''t installing Merge7z' + strDLL_Version + 'U.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok);
+        end
+
+
+    Else
+         begin
+            If Result = True Then
+                Msgbox('We''re are installing Merge7z' + strDLL_Version + '.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok)
+            Else
+                Msgbox('We''re aren''t installing Merge7z' + strDLL_Version + '.DLL because the system has 7-Zip ' + IntToStr(int7Zip_Version) + ' installed.', mbInformation, mb_Ok);
+        end }
+
+End;
+
+{Determines whether or not to Install the Comctl Update
+Note: this confusing code isn't Seier's it's from jrsoftware.org :)
+}
+function InstallComCtlUpdate: Boolean;
+var
+  MS, LS: Cardinal;
+begin
+    Case intComCtlNeeded of
+        -1: Result := False;
+        0:
+            begin
+
+                // Only install if the existing comctl32.dll is < 5.80
+                Result := False;
+                intComCtlNeeded := -1;
+                if GetVersionNumbers(ExpandConstant('{sys}\comctl32.dll'), MS, LS) then
+                    begin
+                        if MS < $00050050 then
+                            begin
+                                Result := True;
+                                intComCtlNeeded := 1
+                            end;
+                    end
+            end;
+        1: Result := True;
+
+    end;
+end;
+
+{Returns an integer representing the version application the user has installed if any
+Currently this only supports VSS, but hopefully this'll support Rational Clear Case Soon enough}
+
+
+
+Function SourceSafePath(): string;
+Begin
+    {Detects the path to the Source Safe Application Folder}
+    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\SourceSafe', 'API Current Database', strSS_Path)
+
+    {Adds the SS.exe, Source Safe Main application .exe to that path}
+    strSS_Path := strSS_Path + '\Win32';
+
+    Result := strSS_Path;
+End;
+
+Function SSexePath(): string;
+Begin
+    Result := strSS_Path + '\SS.exe'
+end;
+
+
+
+Function SourceSafeVersion(): integer;
+Var
+    strSS_Version: string;
+    strSS_Major: string;
+    intMajor_Len: integer;
+Begin
+    if strSS_Path = '' THen
+        strSS_Path := SourceSafePath;
+
+    GetVersionNumbersString(strSS_Path + '\SSExp.exe',  strSS_Version)
+
+    Repeat
+        intMajor_Len := intMajor_Len + 1;
+    Until Copy(strSS_Version, intMajor_Len + 1, 1) = '.'
+
+    strSS_Major := Copy(strSS_Version, 1, intMajor_Len);
+
+    Result :=  StrToInt(strSS_Major);
+end;
+
+Function SourceControlAppInt(Unused: string): Integer;
+    var
+    intSS_Ver: integer;
+Begin
+    If RegQueryDWordValue(HKCU, 'Software\Thingamahoochie\WinMerge\Settings', 'VersionSystem', Result) = True then
+        Begin
+            {if the user either doesn't have their source control set or has it set to VSS, then..}
+            If Result < 3 Then
+                begin
+                    intSS_Ver := SourceSafeVersion;
+
+                    {If the user has VSS 5 or higher then...}
+                    If intSS_Ver > 4 Then
+
+                        {Set it to the integer representing VSS 5 or higher}
+                        result := 2
+                    else
+                        {Set it to VSS 4 and under}
+                        Result := 1;
+                end;
+        end
+    else
+        begin
+                    intSS_Ver := SourceSafeVersion;
+
+                    {If the user has VSS 5 or higher then...}
+                    If intSS_Ver > 4 Then
+
+                        {Set it to the integer representing VSS 5 or higher}
+                        result := 2
+                    else
+                        {Set it to VSS 4 and under}
+                        Result := 1
+        end;
+
+
+End;
+
+Function SourceControlAppPath(Unused: string): string;
+Begin
+    If SourceControlAppInt('') < 3 Then
+        Result := SSexePath()
+    else
+        RegQueryStringValue(HKCU, 'Software\Thingamahoochie\WinMerge\Settings', 'VssPath', Result);
+End;
+
+Function InitializeSetup(): boolean;
+Begin
+    SourceSafeVersion;
+    Result := True;
+End;
+
+
+[_ISTool]
+OutputExeFilename=D:\Programming\Visual C++\WinMerge\WinMerge\InnoSetup\Output\WinMerge 2.1.5.13.exe