Table of Contents

Citrix Online Plugin

Adaptation of the opsi-template scripts for the Citrix Online Plugin.
The online plugin is not being updated any more, so we have to use Citrix Receiver.
Downloadable from the Citrix Receiver site: http://receiver.citrix.com/

As Citrix Receiver is loaded with lots of unneeded stuff, we are going to install only one component.
Extract the downloaded file with Total Commander, or an other program that can handle compressed .exe files.
We need the ICAWebWrapper.msi file, this is the .msi of the Online Plugin.

An useful tool is InstEd!: http://www.instedit.com/download.html
With this we make an msi transform to change the title that is shown in the add/remove programs interface in windows. “Online Plugin” doesn't say very much, does it?
In InstEd! we choose Tables → Property, change ProductName to Citrix Online Plug-in 14.1.0.0 (or the version that you are installing).
More information about MSI transforms: http://www.instedit.com/workingwithtransforms.html

This is a different version than the one already on here, this includes adding a website to the trusted zone in Internet Settings, and creating a few shortcuts. Only tested this as script, not as complete package. The mozilla-firefox package is not finished yet.

Shortcuts are made for the https://subdomain.your-mom.com site, which of course doesn't really exist.

So we have :
%scriptpath%\files\Citrix_ICAWebWrapper_14.1.0.0.mst
%scriptpath%\files\Citrix_ICAWebWrapper_14.1.0.0.msi

control file

[Package]
version: 1
depends: 
incremental: False
 
[Product]
type: localboot
id: citrix-ica-plugin
name: Citrix ICA client web plugin
description: The Citrix ICA client provides connectivity to remote applications.
advice: Install this application if you need to connect to the your-cunt environment.
version: 14.1.0.0
priority: 0
licenseRequired: False
productClasses: 
setupScript: setup3264.ins
uninstallScript: uninstall3264.ins
updateScript: 
alwaysScript: 
onceScript: 
customScript: 
userLoginScript: 
 
[ProductDependency]
action: setup
requiredProduct: mozilla-firefox
requiredStatus: installed
 
[Changelog]
citrix-ica-plugin (14.1.0.0-1) testing; urgency=low
 
  * Initial package
 
 -- ICT <ict@gcecad-service.nl>  Wed, 07 May 2014 21:13:00 +0000

setup3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
 
[Actions]
requiredWinstVersion >= "4.10.8.6"
 
;DefVar $MsiId32$
;DefVar $UninstallProgram32$
;DefVar $MsiId64$
;DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ProductId$  
DefVar $MinimumSpace$
DefVar $InstallDir32$
;DefVar $InstallDir64$
DefVar $ExitCode$
DefVar $INST_SystemType$
;DefVar $INST_architecture$
DefVar $INST_MsVersion$
 
set $INST_MsVersion$ = GetMsVersionInfo
Set $INST_SystemType$ = GetSystemType
;set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
;$ProductId$ should be the name of the product in opsi
; therefore please: only lower letters, no umlauts, 
; no white space use '-' as a seperator
Set $ProductId$       = "citrix-ica-plugin"
Set $MinimumSpace$    = "250 MB"
; the path were we find the product after the installation
Set $InstallDir32$      = "%ProgramFiles32Dir%\Citrix\ICA Client"
;Set $InstallDir64$      = "%ProgramFiles64Dir%\<path to the product>"
; ----------------------------------------------------------------
 
if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError
	; Stop process and set installation status to failed
endif
if $INST_MsVersion$ < "5.1"
	LogError "Windows XP or newer is required for " + $ProductId$  
	isFatalError
endif
 
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
 
if FileExists("%ScriptPath%\delsub3264.ins")
	comment "Start uninstall sub section"
	Sub "%ScriptPath%\delsub3264.ins"
endif
 
comment "installing"
 
if ($INST_SystemType$ = "x86 System") 
;and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
	Message "Installing " + $ProductId$ + "..."
	comment "Start setup program"
	killtask "redirector.exe"
	killtask "concentr.exe"
	killtask "wfcrun32.exe"
	Winbatch_install_32
	Sub_check_exitcode
	comment "Copy files"
	Files_install_32 /32Bit
	comment "Patch Registry"
	Registry_install /32Bit
	Registry_install_AllProfiles /AllNTUserDats
	comment "Create shortcuts"
	LinkFolder_install
endif
 
if ($INST_SystemType$ = "64 Bit System") 
;and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
	Message "Installing " + $ProductId$ + "..."
	comment "Start setup program"
	killtask "redirector.exe"
	killtask "concentr.exe"
	killtask "wfcrun32.exe"
	Winbatch_install_32
	Sub_check_exitcode
	comment "Copy files"
	Files_install_32 /64Bit
	comment "Patch Registry"
	Registry_install /64Bit
	Registry_install /32Bit
	Registry_install_AllProfiles /AllNTUserDats
	comment "Create shortcuts"
	LinkFolder_install
endif
 
 
[Winbatch_install_32]
"%SystemRoot%\system32\msiexec.exe" /qb! /package "%ScriptPath%\files\Citrix_ICAWebWrapper_14.1.0.0.msi" TRANSFORMS="%ScriptPath%\files\Citrix_ICAWebWrapper_14.1.0.0.mst" ADDLOCAL=ALL
 
[Files_install_32]
delete -f "$InstallDir32$\IEInterceptor.dll"
delete -f "$InstallDir32$\npURLInterceptorPlugin.dll"
delete -sf "$InstallDir32$\Firefox_Extension\"
delete -sf "$InstallDir32$\Chrome_Extension\"
 
[Winbatch_install_64]
; Choose one of the following examples as basis for your installation
; You can use $LicenseKey$ var to pass a license key to the installer
;
; === Nullsoft Scriptable Install System ================================================================
; "%ScriptPath%\Setup.exe" /S
;
; === MSI package =======================================================================================
; You may use the parameter PIDKEY=$Licensekey$
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=2 REBOOT=ReallySuppress
;
; === InstallShield + MSI=====================================================================================
; Attention: The path to the log file should not contain any whitespaces
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=2 REBOOT=ReallySuppress"
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
;
; === InstallShield =====================================================================================
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
; "%ScriptPath%\setup.exe" /s /sms /f1"%ScriptPath%\setup.iss" /f2"$LogDir$\$ProductId$.install_log.txt"
;
; === Inno Setup ========================================================================================
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
; You may create setup answer file by: setup.exe /SAVEINF="filename"
; You may use an answer file by the parameter /LOADINF="filename"
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
 
[Files_install_64]
; Example of recursively copying some files into the installation directory:
;
; copy -s "%ScriptPath%\files\*.*" "$InstallDir64$"
 
[Registry_install]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix]
set "IcaEnableKeepAlive" = REG_DWORD:00000001
set "IcaKeepAliveInternal" = REG_DWORD:00000060
 
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
set "TcpMaxDataRetransmissions" = REG_DWORD:00000010
 
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
deletevar "Redirector"
 
[Registry_install_AllProfiles]
; Add gisportal2.eneco.nl to Trusted Sites in IE
openkey [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\your-mom.com\subdomain]
set "https" = REG_DWORD:0002
 
; Remove stored start menu order
deletekey [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu]
 
[LinkFolder_install]
set_basefolder common_programs
set_subfolder Citrix
set_link
 	name: YOURCUNT (Mozilla Firefox)
 	target: "%ProgramFiles32Dir%\Mozilla Firefox\firefox.exe"
 	parameters: https://subdomain.your-mom.com
 	working_dir: "%ProgramFiles32Dir%\Mozilla Firefox"
 	icon_file: "$InstallDir32$\wfica32.exe"
 	icon_index: 0
end_link
set_link
 	name: YOURCUNT (Internet Explorer)
 	target: "%ProgramFiles32Dir%\Internet Explorer\iexplore.exe"
 	parameters: https://subdomain.your-mom.com
 	working_dir: "%ProgramFiles32Dir%\Internet Explorer\"
 	icon_file: "$InstallDir32$\wfica32.exe"
 	icon_index: 0
end_link
 
set_basefolder common_desktopdirectory
set_subfolder ""
set_link
 	name: YOURCUNT
 	target: "%ProgramFiles32Dir%\Mozilla Firefox\firefox.exe"
 	parameters: https://subdomain.your-mom.com
 	working_dir: "%ProgramFiles32Dir%\Mozilla Firefox"
 	icon_file: "$InstallDir32$\wfica32.exe"
 	icon_index: 0
end_link
 
[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

uninstall3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
[Actions]
requiredWinstVersion >= "4.10.8.6"
 
;DefVar $MsiId32$
;DefVar $UninstallProgram32$
;DefVar $MsiId64$
;DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir32$
;DefVar $InstallDir64$
DefVar $INST_SystemType$
;DefVar $INST_architecture$
 
Set $INST_SystemType$ = GetSystemType
;set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
 
 
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "citrix-ica-plugin"
Set $InstallDir32$    = "%ProgramFiles32Dir%\Citrix\ICA Client"
;Set $InstallDir64$    = "%ProgramFiles64Dir%\<path to the product>"
; ----------------------------------------------------------------
 
 
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
 
Message "Uninstalling " + $ProductId$ + " ..."
 
if FileExists("%ScriptPath%\delsub3264.ins")
	comment "Start uninstall sub section"
	Sub "%ScriptPath%\delsub3264.ins"
endif

delsub3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
 
DefStringList $result$
DefStringList $result1$
DefVar $appKey$
DefVar $UninstallCommandList$
DefVar $appString$
DefVar $appKeyString$
DefVar $testName$
;DefVar $exeString$
 
Set $appKeyString$ = "DisplayName"
Set $appString$ = "Citrix Online"
 
;Set $MsiId32$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'
;Set $UninstallProgram32$ = $InstallDir32$ + "\uninstall.exe"
 
;Set $MsiId64$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'
;Set $UninstallProgram64$ = $InstallDir64$ + "\uninstall.exe"
 
if ($INST_SystemType$ = "x86 System") 
;and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
	Message "Uninstalling " + $ProductId$ + "..."
 
	Set $result$ = getRegistryKeyList32("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
	for $app$ in $result$ do Sub_searchApp32
	if not ($UninstallCommandList$ = "")
		set $result1$ = splitString($UninstallCommandList$,"::")
		killtask "redirector.exe"
		killtask "concentr.exe"
		killtask "wfcrun32.exe"
		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_32 /32Bit
		sub_check_exitcode
	endif
 
 
;	if FileExists($UninstallProgram32$)
;		comment "Uninstall program found, starting uninstall"
;		Winbatch_uninstall_32
;		sub_check_exitcode
;	endif
 
;	if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId32$ + "] DisplayName") = "")
;		comment "MSI id " + $MsiId32$ + " found in registry, starting msiexec to uninstall"
;		Winbatch_uninstall_msi_32
;		sub_check_exitcode
;	endif
 
	comment "Delete files"
	Files_uninstall_32 /32Bit
	Files_uninstall_AllProfiles /AllNtUserProfiles
	comment "Cleanup registry"
	Registry_uninstall /32Bit
	Registry_uninstall_AllProfiles /AllNTUserDats
endif
 
if ($INST_SystemType$ = "64 Bit System") 
;and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
	Message "Uninstalling " + $ProductId$ + "..."
 
;	Set $result$ = getRegistryKeyList64("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
;	for $app$ in $result$ do Sub_searchApp64
; 	if not ($UninstallCommandList$ = "")
;		set $result1$ = splitString($UninstallCommandList$,"::")
;		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_64 /64Bit
;		sub_check_exitcode
;	endif
 
	Set $result$ = getRegistryKeyList32("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
	for $app$ in $result$ do Sub_searchApp32
	if not ($UninstallCommandList$ = "")
		set $result1$ = splitString($UninstallCommandList$,"::")
		killtask "redirector.exe"
		killtask "concentr.exe"
		killtask "wfcrun32.exe"
		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_32 /32Bit
		sub_check_exitcode
	endif
 
;	if FileExists($UninstallProgram64$)
;		comment "Uninstall program found, starting uninstall"
;		Winbatch_uninstall_64
;		sub_check_exitcode
;	endif
 
;	if not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId64$ + "] DisplayName") = "")
;		comment "MSI id " + $MsiId64$ + " found in registry, starting msiexec to uninstall"
;		Winbatch_uninstall_msi_64
;		sub_check_exitcode
;	endif
 
	comment "Delete files"
	Files_uninstall_32 /64Bit
	Files_uninstall_AllProfiles /AllNtUserProfiles	
	comment "Cleanup registry"
	Registry_uninstall /64Bit
	Registry_uninstall_AllProfiles /AllNTUserDats
endif
 
comment "Delete program shortcuts"
LinkFolder_uninstall
 
[Winbatch_uninstall_32]
$UninstallCommand$
 
[Files_uninstall_32]
;delete -sf "$InstallDir32$\"
delete -sf "%ProgramFiles32Dir%\Citrix\"
 
[Winbatch_uninstall_64]
$UninstallCommand$
 
[Files_uninstall_64]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
; delete -sf "$InstallDir64$\"
 
[Files_uninstall_AllProfiles]
delete -sf "%UserProfileDir%\Application Data\ICAClient\"
 
[Registry_uninstall]
deletekey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix]
 
[Registry_uninstall_AllProfiles]
 
[LinkFolder_uninstall]
set_basefolder common_programs
delete_subfolder Citrix
 
set_basefolder common_desktopdirectory
set_subfolder ""
delete_element Stedin - E-GIS
 
[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
 
[Sub_searchApp32]
set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] " + $appKeyString$
Set $testName$ = GetRegistryStringValue32($appKey$)
if contains($testName$,$appString$)
;	set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] UninstallString"
;	Set $testName$ = GetRegistryStringValue32($appKey$)
	;if contains(lower($testName$),lower("MsiExec.exe"))
	set $UninstallCommandList$ = $UninstallCommandList$ + "MsiExec.exe /x " + "$app$" + " /qb-! REBOOT=ReallySuppress::"
	;else
	;	Set $testName$ = unquote($testName$,'"')
	;	Set $testName$ = unquote($testName$,"'")
	;	Set $exeString$ = takeString(0, splitString ($testName$, "exe"))
	;	set $UninstallCommandList$ = $UninstallCommandList$ + $exeString$ + "exe /S::"
	;endif
endif
 
[Sub_searchApp64]
set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] " + $appKeyString$
Set $testName$ = GetRegistryStringValue64($appKey$)
if contains($testName$,$appString$)
;	set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] UninstallString"
;	Set $testName$ = GetRegistryStringValue64($appKey$)
	;if contains(lower($testName$),lower("MsiExec.exe"))
	set $UninstallCommandList$ = $UninstallCommandList$ + "MsiExec.exe /x " + "$app$" + " /qb-! REBOOT=ReallySuppress::"
	;else
	;	Set $testName$ = unquote($testName$,'"')
	;	Set $testName$ = unquote($testName$,"'")
	;	Set $exeString$ = takeString(0, splitString ($testName$, "exe"))
	;	set $UninstallCommandList$ = $UninstallCommandList$ + '"' + $exeString$ + 'exe /S"::'
	;endif
endif