PuTTY 0.62

Scripts and Guide by Soren Birk

This guide is for PuTTY 0.62.

PuTTY normally saves its sessions to the Registry, but there are too many registry keys to create them directly in the script.

I have therefore downloaded PuTTY Portable from http://www.portableapps.com so i can create some pre-configured sessions.

You need to add some product properties to the control-file, before you can select the configs in opsi-configed.

Tested with:

  • OPSI 4.0.2.4
  • Winst 4.11.3.3
  • Windows 7, 32 and 64Bit

Instructions:

  • First download putty.exe from this homepage, and then copy it to a folder called “PuTTY_noconf” under CLIENT_DATA.
  • Sessions are stored in the Registry, but has a ton of keys, so instead we use PuTTY-portable for the configured versions (download here).
  • Extract to a folder on the desktop - then browse to the subfolder \App\AppInfo\Launcher and delete the “splash.jpg”.
  • Copy, Paste the folder for as many configs as you want (PuTTY_conf1, _conf2 and so on). Open the PuTTY for the respective folder, and create your saved sessions.
  • Afterwards copy all the PuTTY_confx folders to CLIENT_DATA.

Tree:

CLIENT_DATA
  ├ setup32.ins
  ├ uninstall32.ins
  ├ delsub32.ins
  ├ puttylogo.png
  ├ PuTTY_noconf
  │ └ putty.exe
  ├ PuTTY_conf1
  │ ├ App
  │ ├ Data
  │ ├ Other
  │ └ PuTTYPortable.exe
  └ PuTTY_conf2
    └ <same folder-structure as PuTTY_conf1>

You should rename the “conf1, conf2” to something that makes sense to you. For example “Net1 Servers”, “Net2 Servers” and so on.

Control file

[Package]
version: 1
depends: 
incremental: False

[Product]
type: localboot
id: putty
name: PuTTY
description: Terminal emulator
advice: 
version: 0.62
priority: 0
licenseRequired: False
productClasses: 
setupScript: setup32.ins
uninstallScript: uninstall32.ins
updateScript: 
alwaysScript: 
onceScript: 
customScript: 
userLoginScript: 

[ProductProperty]
type: unicode
name: configuration
multivalue: False
editable: True
description: Choose your configuration
values: ["none", "conf1", "conf2"]
default: ["none"]

Setup32.ins

; Author Soren Birk
 
[Actions]
requiredWinstVersion >= "4.11.2.6"
 
DefVar $LogDir$
DefVar $ProductId$  
DefVar $MinimumSpace$
DefVar $InstallDir$
DefVar $ExitCode$
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $Konfiguration$
 
Set $LogDir$ = "%SystemDrive%\tmp"
Set $Konfiguration$ = GetProductProperty("configuration", "none")
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "putty"
Set $MinimumSpace$    = "5 MB"
Set $InstallDir$      = "%ProgramFiles32Dir%\PuTTY"
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
; ----------------------------------------------------------------
 
if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError "Not enough space"
else
	comment "Display product logo"
	ShowBitmap "%ScriptPath%\puttylogo.png" $ProductId$
 
	if FileExists("%ScriptPath%\delsub32.ins")
		comment "Start uninstall sub section"
		Sub "%ScriptPath%\delsub32.ins"
	endif
 
	Message "Installing " + $ProductId$ + " ..."
 
	if $LicenseRequired$ = "true"
		comment "Licensing required, reserve license and get license key"
		Sub_get_licensekey
	endif
 
	if ($Konfiguration$ = "conf1")
		comment "Copying Files"
		Files_install_unv
 
		comment "Creating Shortcuts"
		LinkFolder_install_konf
	endif
 
	if ($Konfiguration$ = "conf2")
		comment "Copying Files"
		Files_install_adm
 
		comment "Creating Shortcuts"
		LinkFolder_install_konf
	endif
 
	if ($Konfiguration$ = "none")
		comment "Copying Files"
		Files_install /32Bit
 
		comment "Creating Shortcuts"
		LinkFolder_install
	endif	
endif
 
[Files_install]
copy -s "%ScriptPath%\PuTTYnone\*.*" "$InstallDir$"
 
 
[Files_install_unv]
copy -s "%ScriptPath%\PUTTYconf1\*.*" "$InstallDir$"
 
 
[Files_install_adm]
copy -s "%ScriptPath%\PUTTYconf2\*.*" "$InstallDir$"
 
 
[LinkFolder_install]
set_basefolder common_programs
set_subfolder "PuTTY"
 
set_link
	name: "PuTTY"
	target: "$InstallDir$\putty.exe"
	parameters:
	working_dir: $InstallDir$
	icon_file: "$InstallDir$\putty.exe"
	icon_index:
end_link
 
set_basefolder common_desktopdirectory
set_subfolder ""
 
set_link
	name: "PuTTY"
	target: "$InstallDir$\putty.exe"
	parameters:
	working_dir: $InstallDir$
	icon_file: "$InstallDir$\putty.exe"
	icon_index:
end_link
 
 
[LinkFolder_install_konf]
set_basefolder common_programs
set_subfolder "PuTTY"
 
set_link
	name: "PuTTY"
	target: "$InstallDir$\PuTTYPortable.exe"
	parameters:
	working_dir: $InstallDir$
	icon_file: "$InstallDir$\App\putty\putty.exe"
	icon_index:
end_link
 
set_basefolder common_desktopdirectory
set_subfolder ""
 
set_link
	name: "PuTTY"
	target: "$InstallDir$\PuTTYPortable.exe"
	parameters:
	working_dir: $InstallDir$
	icon_file: "$InstallDir$\App\putty\putty.exe"
	icon_index:
end_link
 
 
[Sub_get_licensekey]
if opsiLicenseManagementEnabled
	comment "License management is enabled and will be used"
 
	comment "Trying to get a license key"
	Set $LicenseKey$ = demandLicenseKey ($LicensePool$)
	; If there is an assignment of exactly one licensepool to the product the following call is possible:
	; Set $LicenseKey$ = demandLicenseKey ("", $ProductId$)
	;
	; If there is an assignment of a license pool to a windows software id, it is possible to use:
	; DefVar $WindowsSoftwareId$
	; $WindowsSoftwareId$ = "..."
	; Set $LicenseKey$ = demandLicenseKey ("", "", $WindowsSoftwareId$)
 
	DefVar $ServiceErrorClass$
	set $ServiceErrorClass$ = getLastServiceErrorClass
	comment "Error class: " + $ServiceErrorClass$
 
	if $ServiceErrorClass$ = "None"
		comment "Everything fine, we got the license key '" + $LicenseKey$ + "'"
	else
		if $ServiceErrorClass$ = "LicenseConfigurationError"
			LogError "Fatal: license configuration must be corrected"
			LogError getLastServiceErrorMessage
			isFatalError
		else 
			if $ServiceErrorClass$ = "LicenseMissingError"
				LogError "Fatal: required license is not supplied"
				isFatalError
			endif
		endif
	endif
else
	LogError "Fatal: license required, but license management not enabled"
	isFatalError
endif
 
 
[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
	comment "Looks good: setup program gives exitcode zero"
else
	comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
	if ($ExitCode$ = "1605")
		comment "ERROR_UNKNOWN_PRODUCT	1605	This action is only valid for products that are currently installed."
		comment "Uninstall of a not installed product failed - no problem"
	else
		if ($ExitCode$ = "1641")
			comment "looks good: setup program gives exitcode 1641"
			comment "ERROR_SUCCESS_REBOOT_INITIATED	1641	The installer has initiated a restart. This message is indicative of a success."
		else
			if ($ExitCode$ = "3010")
				comment "looks good: setup program gives exitcode 3010"
				comment "ERROR_SUCCESS_REBOOT_REQUIRED	3010	A restart is required to complete the install. This message is indicative of a success."
			else
				logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
				isFatalError
			endif
		endif
	endif
endif

Uninstall32.ins

; Author Soren Birk
 
[Actions]
requiredWinstVersion >= "4.11.2.6"
 
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir$
DefVar $LicenseRequired$
DefVar $LicensePool$
 
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "putty"
Set $InstallDir$      = "%ProgramFiles32Dir%\PuTTY"
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
; ----------------------------------------------------------------
 
 
comment "Display product logo"
ShowBitmap "%ScriptPath%\puttylogo.png" $ProductId$
 
Message "Uninstalling " + $ProductId$ + " ..."
 
if FileExists("%ScriptPath%\delsub32.ins")
	comment "Start uninstall sub section"
	Sub "%ScriptPath%\delsub32.ins"
endif
 
if $LicenseRequired$ = "true"
	comment "Licensing required, free license used"
	Sub_free_license
endif
 
[Sub_free_license]
comment "License management is enabled and will be used"
 
comment "Trying to free license used for the product"
DefVar $result$
Set $result$ = FreeLicense($LicensePool$)
; If there is an assignment of a license pool to the product, it is possible to use
; Set $result$ = FreeLicense("", $ProductId$)
;
; If there is an assignment of a license pool to a windows software id, it is possible to use
; DefVar $WindowsSoftwareId$
; $WindowsSoftwareId$ = "..."
; set $result$ = FreeLicense("", "", $WindowsSoftwareId$)

delsub32.ins

; Author Soren Birk
 
Message "Uninstalling " + $ProductId$ + " ..."
 
if FileExists("%ProgramFiles32Dir%\PuTTY")
	comment "Uninstall program found, starting uninstall"
 
	comment "Deleting shortcuts"
	LinkFolder_uninstall
 
	comment "Deleting files"
	Files_uninstall /32Bit
 
	comment "Cleaning the Registry"
	Registry_uninstall
endif
 
 
[LinkFolder_uninstall]
set_basefolder common_programs
delete_subfolder "PuTTY"
 
set_basefolder common_desktopdirectory
set_subfolder ""
delete_element "PuTTY"
 
 
[Files_uninstall]
del -sf "$InstallDir$\"
 
 
[Registry_uninstall]
deletekey [HKCU\Software\SimonTatham]
 
 
[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
	comment "Looks good: setup program gives exitcode zero"
else
	comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
	if ($ExitCode$ = "1605")
		comment "ERROR_UNKNOWN_PRODUCT	1605	This action is only valid for products that are currently installed."
		comment "Uninstall of a not installed product failed - no problem"
	else
		if ($ExitCode$ = "1641")
			comment "looks good: setup program gives exitcode 1641"
			comment "ERROR_SUCCESS_REBOOT_INITIATED	1641	The installer has initiated a restart. This message is indicative of a success."
		else
			if ($ExitCode$ = "3010")
				comment "looks good: setup program gives exitcode 3010"
				comment "ERROR_SUCCESS_REBOOT_REQUIRED	3010	A restart is required to complete the install. This message is indicative of a success."
			else
				logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
				isFatalError
			endif
		endif
	endif
endif

QR Code
QR Code userspace:putty062 (generated for current page)