; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; vim:ts=2:sw=2:et: #define MyAppName "WezTerm" ;#define MyAppVersion "1.5" #define MyAppPublisher "Wez Furlong" #define MyAppURL "http://wezfurlong.org/wezterm" #define MyAppExeName "wezterm.exe" [Setup] AppId={{BCF6F0DA-5B9A-408D-8562-F680AE6E1EAF} ArchitecturesAllowed=x64 ArchitecturesInstallIn64BitMode=x64 AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\{#MyAppName} DisableProgramGroupPage=yes ;LicenseFile=..\LICENSE.md ; Remove the following line to run in administrative install mode (install for all users.) ;PrivilegesRequired=lowest ;PrivilegesRequiredOverridesAllowed=dialog OutputDir=.. OutputBaseFilename=WezTerm-Setup SetupIconFile=..\assets\windows\terminal.ico Compression=lzma SolidCompression=yes WizardStyle=modern ; Build 1809 is required for pty support MinVersion=10.0.17763 ChangesEnvironment=true [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "..\target\release\wezterm.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\target\release\wezterm-mux-server.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\target\release\mesa\opengl32.dll"; DestDir: "{app}\mesa"; Flags: ignoreversion Source: "..\target\release\conpty.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "..\target\release\OpenConsole.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\target\release\strip-ansi-escapes.exe"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Registry] Root: HKA; Subkey: "Software\Classes\Drive\shell\Open WezTerm here"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\Drive\shell\Open WezTerm here"; ValueName: "icon"; ValueType: string; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey; Root: HKA; Subkey: "Software\Classes\Drive\shell\Open WezTerm here\command"; ValueType: string; ValueData: """{app}\{#MyAppExeName}"" start --no-auto-connect --cwd ""%V\"""; Flags: uninsdeletekey; Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\Open WezTerm here"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\Open WezTerm here"; ValueName: "icon"; ValueType: string; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey; Root: HKA; Subkey: "Software\Classes\Directory\Background\shell\Open WezTerm here\command"; ValueType: string; ValueData: """{app}\{#MyAppExeName}"" start --no-auto-connect --cwd ""%V\\"""; Flags: uninsdeletekey; Root: HKA; Subkey: "Software\Classes\Directory\shell\Open WezTerm here"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\Directory\shell\Open WezTerm here"; ValueName: "icon"; ValueType: string; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey; Root: HKA; Subkey: "Software\Classes\Directory\shell\Open WezTerm here\command"; ValueType: string; ValueData: """{app}\{#MyAppExeName}"" start --no-auto-connect --cwd ""%V\\"""; Flags: uninsdeletekey; [Code] { https://stackoverflow.com/a/46609047/149111 } const EnvironmentKey = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'; procedure EnvAddPath(instlPath: string); var Paths: string; begin { Retrieve current path (use empty string if entry not exists) } if not RegQueryStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then Paths := ''; if Paths = '' then Paths := instlPath + ';' else begin { Skip if string already found in path } if Pos(';' + Uppercase(instlPath) + ';', ';' + Uppercase(Paths) + ';') > 0 then exit; if Pos(';' + Uppercase(instlPath) + '\;', ';' + Uppercase(Paths) + ';') > 0 then exit; { Append App Install Path to the end of the path variable } if Paths[length(Paths)] <> ';' then Paths := Paths + ';'; Paths := Paths + instlPath + ';'; end; { Overwrite (or create if missing) path environment variable } if RegWriteStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then Log(Format('The [%s] added to PATH: [%s]', [instlPath, Paths])) else Log(Format('Error while adding the [%s] to PATH: [%s]', [instlPath, Paths])); end; procedure EnvRemovePath(instlPath: string); var Paths: string; P, Offset, DelimLen: Integer; begin { Skip if registry entry not exists } if not RegQueryStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then exit; { Skip if string not found in path } DelimLen := 1; { Length(';') } P := Pos(';' + Uppercase(instlPath) + ';', ';' + Uppercase(Paths) + ';'); if P = 0 then begin { perhaps instlPath lives in Paths, but terminated by '\;' } DelimLen := 2; { Length('\;') } P := Pos(';' + Uppercase(instlPath) + '\;', ';' + Uppercase(Paths) + ';'); if P = 0 then exit; end; { Decide where to start string subset in Delete() operation. } if P = 1 then Offset := 0 else Offset := 1; { Update path variable } Delete(Paths, P - Offset, Length(instlPath) + DelimLen); { Overwrite path environment variable } if RegWriteStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then Log(Format('The [%s] removed from PATH: [%s]', [instlPath, Paths])) else Log(Format('Error while removing the [%s] from PATH: [%s]', [instlPath, Paths])); end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then EnvAddPath(ExpandConstant('{app}')); end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then EnvRemovePath(ExpandConstant('{app}')); end;