contrib/packaging/inno/modpath.iss
author Kyle Lippincott <spectral@google.com>
Tue, 27 Aug 2019 11:56:19 -0700
changeset 42862 3cf091843b4f
parent 41852 0f49b56d5d74
child 44010 109315c41d5e
permissions -rw-r--r--
split: handle partial commit of renames when doing split or record (issue5723) When using split or record, using either interface (text or curses), selecting portions of the file to be committed/recorded did not work; the entire file was treated as having been selected. This was because the logic for handling partial application of the patches relies on knowing what files are "new with modifications" and it doesn't treat "rename destination" as "new". There was a complicating issue, however. We're relying on the patch header specifying the copy from/to information, which works as long as the 'copy from' file is there. In the case of renames, however, the 'rename from' file is *not* there, so we need to add it back. Differential Revision: https://phab.mercurial-scm.org/D6768
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41852
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     1
// ----------------------------------------------------------------------------
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     2
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     3
// Inno Setup Ver:	5.4.2
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     4
// Script Version:	1.4.2
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     5
// Author:			Jared Breland <jbreland@legroom.net>
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     6
// Homepage:		http://www.legroom.net/software
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     7
// License:			GNU Lesser General Public License (LGPL), version 3
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     8
//						http://www.gnu.org/licenses/lgpl.html
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     9
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    10
// Script Function:
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    11
//	Allow modification of environmental path directly from Inno Setup installers
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    12
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    13
// Instructions:
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    14
//	Copy modpath.iss to the same directory as your setup script
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    15
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    16
//	Add this statement to your [Setup] section
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    17
//		ChangesEnvironment=true
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    18
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    19
//	Add this statement to your [Tasks] section
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    20
//	You can change the Description or Flags
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    21
//	You can change the Name, but it must match the ModPathName setting below
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    22
//		Name: modifypath; Description: &Add application directory to your environmental path; Flags: unchecked
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    23
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    24
//	Add the following to the end of your [Code] section
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    25
//	ModPathName defines the name of the task defined above
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    26
//	ModPathType defines whether the 'user' or 'system' path will be modified;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    27
//		this will default to user if anything other than system is set
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    28
//	setArrayLength must specify the total number of dirs to be added
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    29
//	Result[0] contains first directory, Result[1] contains second, etc.
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    30
//		const
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    31
//			ModPathName = 'modifypath';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    32
//			ModPathType = 'user';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    33
//
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    34
//		function ModPathDir(): TArrayOfString;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    35
//		begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    36
//			setArrayLength(Result, 1);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    37
//			Result[0] := ExpandConstant('{app}');
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    38
//		end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    39
//		#include "modpath.iss"
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    40
// ----------------------------------------------------------------------------
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    41
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    42
procedure ModPath();
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    43
var
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    44
	oldpath:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    45
	newpath:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    46
	updatepath:	Boolean;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    47
	pathArr:	TArrayOfString;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    48
	aExecFile:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    49
	aExecArr:	TArrayOfString;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    50
	i, d:		Integer;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    51
	pathdir:	TArrayOfString;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    52
	regroot:	Integer;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    53
	regpath:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    54
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    55
begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    56
	// Get constants from main script and adjust behavior accordingly
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    57
	// ModPathType MUST be 'system' or 'user'; force 'user' if invalid
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    58
	if ModPathType = 'system' then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    59
		regroot := HKEY_LOCAL_MACHINE;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    60
		regpath := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    61
	end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    62
		regroot := HKEY_CURRENT_USER;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    63
		regpath := 'Environment';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    64
	end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    65
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    66
	// Get array of new directories and act on each individually
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    67
	pathdir := ModPathDir();
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    68
	for d := 0 to GetArrayLength(pathdir)-1 do begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    69
		updatepath := true;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    70
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    71
		// Modify WinNT path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    72
		if UsingWinNT() = true then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    73
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    74
			// Get current path, split into an array
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    75
			RegQueryStringValue(regroot, regpath, 'Path', oldpath);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    76
			oldpath := oldpath + ';';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    77
			i := 0;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    78
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    79
			while (Pos(';', oldpath) > 0) do begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    80
				SetArrayLength(pathArr, i+1);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    81
				pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    82
				oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath));
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    83
				i := i + 1;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    84
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    85
				// Check if current directory matches app dir
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    86
				if pathdir[d] = pathArr[i-1] then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    87
					// if uninstalling, remove dir from path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    88
					if IsUninstaller() = true then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    89
						continue;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    90
					// if installing, flag that dir already exists in path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    91
					end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    92
						updatepath := false;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    93
					end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    94
				end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    95
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    96
				// Add current directory to new path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    97
				if i = 1 then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    98
					newpath := pathArr[i-1];
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    99
				end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   100
					newpath := newpath + ';' + pathArr[i-1];
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   101
				end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   102
			end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   103
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   104
			// Append app dir to path if not already included
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   105
			if (IsUninstaller() = false) AND (updatepath = true) then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   106
				newpath := newpath + ';' + pathdir[d];
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   107
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   108
			// Write new path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   109
			RegWriteStringValue(regroot, regpath, 'Path', newpath);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   110
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   111
		// Modify Win9x path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   112
		end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   113
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   114
			// Convert to shortened dirname
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   115
			pathdir[d] := GetShortName(pathdir[d]);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   116
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   117
			// If autoexec.bat exists, check if app dir already exists in path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   118
			aExecFile := 'C:\AUTOEXEC.BAT';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   119
			if FileExists(aExecFile) then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   120
				LoadStringsFromFile(aExecFile, aExecArr);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   121
				for i := 0 to GetArrayLength(aExecArr)-1 do begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   122
					if IsUninstaller() = false then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   123
						// If app dir already exists while installing, skip add
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   124
						if (Pos(pathdir[d], aExecArr[i]) > 0) then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   125
							updatepath := false;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   126
							break;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   127
					end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   128
						// If app dir exists and = what we originally set, then delete at uninstall
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   129
						if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   130
							aExecArr[i] := '';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   131
					end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   132
				end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   133
			end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   134
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   135
			// If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   136
			if (IsUninstaller() = false) AND (updatepath = true) then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   137
				SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   138
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   139
			// If uninstalling, write the full autoexec out
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   140
			end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   141
				SaveStringsToFile(aExecFile, aExecArr, False);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   142
			end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   143
		end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   144
	end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   145
end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   146
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   147
// Split a string into an array using passed delimeter
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   148
procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   149
var
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   150
	i: Integer;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   151
begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   152
	i := 0;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   153
	repeat
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   154
		SetArrayLength(Dest, i+1);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   155
		if Pos(Separator,Text) > 0 then	begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   156
			Dest[i] := Copy(Text, 1, Pos(Separator, Text)-1);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   157
			Text := Copy(Text, Pos(Separator,Text) + Length(Separator), Length(Text));
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   158
			i := i + 1;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   159
		end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   160
			 Dest[i] := Text;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   161
			 Text := '';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   162
		end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   163
	until Length(Text)=0;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   164
end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   165
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   166
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   167
procedure CurStepChanged(CurStep: TSetupStep);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   168
var
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   169
	taskname:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   170
begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   171
	taskname := ModPathName;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   172
	if CurStep = ssPostInstall then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   173
		if IsTaskSelected(taskname) then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   174
			ModPath();
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   175
end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   176
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   177
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   178
var
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   179
	aSelectedTasks:	TArrayOfString;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   180
	i:				Integer;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   181
	taskname:		String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   182
	regpath:		String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   183
	regstring:		String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   184
	appid:			String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   185
begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   186
	// only run during actual uninstall
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   187
	if CurUninstallStep = usUninstall then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   188
		// get list of selected tasks saved in registry at install time
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   189
		appid := '{#emit SetupSetting("AppId")}';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   190
		if appid = '' then appid := '{#emit SetupSetting("AppName")}';
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   191
		regpath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+appid+'_is1');
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   192
		RegQueryStringValue(HKLM, regpath, 'Inno Setup: Selected Tasks', regstring);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   193
		if regstring = '' then RegQueryStringValue(HKCU, regpath, 'Inno Setup: Selected Tasks', regstring);
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   194
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   195
		// check each task; if matches modpath taskname, trigger patch removal
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   196
		if regstring <> '' then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   197
			taskname := ModPathName;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   198
			MPExplode(aSelectedTasks, regstring, ',');
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   199
			if GetArrayLength(aSelectedTasks) > 0 then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   200
				for i := 0 to GetArrayLength(aSelectedTasks)-1 do begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   201
					if comparetext(aSelectedTasks[i], taskname) = 0 then
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   202
						ModPath();
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   203
				end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   204
			end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   205
		end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   206
	end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   207
end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   208
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   209
function NeedRestart(): Boolean;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   210
var
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   211
	taskname:	String;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   212
begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   213
	taskname := ModPathName;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   214
	if IsTaskSelected(taskname) and not UsingWinNT() then begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   215
		Result := True;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   216
	end else begin
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   217
		Result := False;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   218
	end;
0f49b56d5d74 inno: replace add_path.exe with a Pascal script
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   219
end;