=== ThinPrint Client 8.0 MSI-Package ===
this script deployed the .print Client engine for Citrix. You must defined a product dependency to the Citrix Plugin for hosted solutions and 2 properties with name UDPPort and TCPPort. So you can define the ports for the firewall. The default value are for this program is 4000 for both ports ( program standard)
Dieses Script verteilt die .print Client Komponente von ThinPrint. In der Produktdefinition müssen Sie eine Produktabhängigkeit zu den Ctrix Plugin für gehostete Anwendungen erstellen und 2 Produkteigenschften mit dem Namen UDPPort und TCPPort. Damit haben Sie die Möglichkeit, die Firewall-Ports vorzudefinieren. Als Standardeinstellung ist 4000 für beide Ports (Prorgamm-Standard)
tested under Windows 7/32 Bit / Getestet unter Windows 7 32 Bit
the 64 Bit section is under construction / Die 64 Bit Sektion ist noch in Arbeit
questions to / Fragen an //[[thomas.fritzsche@captrain.de|Frisoft]]//
loading the licensed components / Herunterlader der zu lizensierenden Konponenten [[http://www.thinprint.de/Download/ClientsTools.aspx]]
the product picture are downloaded from Internet / Das Produktbild ist aus dem Internet herunterzuladen
the scripts are unversal scripts, they are customized for many sloutions / Die Scripts sind Unversal-Scripts, die schon für einige Lösungen abgepasst wurden
the scripts are based of a Solution from forum member //[[hungerharke@gmx.de|Thomas_H]] // / Die Scripte basieren auf einer Lösung vom Forum - Mitglied //[[hungerharke@gmx.de|Thomas_H]]//
the next steps / die nächsten Schritte
* Imimplement a version-query for the thinprint client / Einbau einer Versionsprüfung für den Thinprint -Client
* Changing the Firewallports / Ändern der Firewallports
my directory strcture / Meine Verzeichnisstruktur
files\TPTCP_x64_deu\ThinPrint\TPTCP_x64_deu.msi
files\TPTCP_x86_deu\ThinPrint\TPTCP_x86_deu.msi
delsub.ins
setup.ins
uninstall.ins
ThinPrint.jpg
=== setup.ins ===
[Initial]
setLogLevel=9
; Log Errors in Logfile but don't abort:
ExitOnError=false
; Show syntax errors in the script:
ScriptErrorMessages=on
; Dont trace step by step through the script:
TraceMode=off
; let started programs run in front of the winst window
StayOnTop=false
[Actions]
requiredWinstVersion >= "4.10.8.6"
DefVar $OS$
DefVar $NTVersion$
DefVar $MSOS$
DefVar $Systemtype$
DefVar $MsiId32$
DefVar $UninstallProgram32$
DefVar $MsiId64$
DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ProductId$
DefVar $MinimumSpace$
DefVar $InstallDir32$
DefVar $InstallDir64$
Defvar $InstallTmpDir$
DefVar $ExitCode$
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $INST_SystemType$
DefVar $INST_architecture$
defvar $INSTVersion$
DefVar $Version$
DefVar $Inst_Cmd32$
DefVar $Inst_Cmd64$
DefVar $Inst_Prg$
DefVar $Uninst_Cmd$
DefVar $Uninst_Prg$
DefVar $InstDest$
DefVar $RegName$
DefVar $RegValue$
DefVar $FireWallRulesPath$
DefVar $UDPPort$
DefVar $TCPPort$
DefVar $TCPRulesname$
DefVar $UDPRulesName$
DefVar $TCPRule$
DefVar $UDPRule$
DefVar $CompValue$
Sub_OS_Detect
Set $INST_SystemType$ = $Systemtype$
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
Set $UDPPort$ = GetProductProperty("UDPPort","4000")
Set $TCPPort$ = GetProductProperty("TCPPort","4000")
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$ = "ThinPrint"
Set $Version$ = "2011"
Set $MinimumSpace$ = "50 MB"
; the path were we find the product after the installation
Set $InstallDir32$ = "%ProgramFiles32Dir%\ThinPrint Client"
Set $InstallDir64$ = "%ProgramFiles64Dir%\ThinPrint Client"
Set $LicenseRequired$ = "false"
Set $LicensePool$ = "p_" + $ProductId$
Set $Inst_Prg$ = "msiexec.exe"
Set $Inst_Cmd32$ = '/qb /i "%ScriptPath%\files\TPTCP_x86_deu\ThinPrint\TPTCP_x86_deu.msi" CITRIXCLIENT-DIR="%ProgramFiles32Dir%\Citrix\ICA Client" /quiet'
Set $Inst_Cmd64$ = '/qb /i "%ScriptPath%\files\TPTCP_x64_deu\ThinPrint\TPTCP_x64_deu.msi" CITRIXCLIENT-DIR="%ProgramFiles64Dir%\Citrix\ICA Client" /quiet'
Set $Uninst_Cmd$ = ""
Set $Uninst_Prg$ = ""
Set $FirewallRulesPath$ ="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy"
; ----------------------------------------------------------------
;c:\Windows\System32\msiexec /qb /i "c:\install\ThinPrintClient Windows 8.6.msi" ADDLOCAL="ICA" CITRIXCLIENT-DIR="C:\Program Files\Citrix\ICA Client"
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".jpg" $ProductId$
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
else
; if FileExists("%ScriptPath%\delsub.ins")
; comment "Start uninstall sub section"
; Sub "%ScriptPath%\delsub.ins"
; endif
if $LicenseRequired$ = "true"
comment "Licensing required, reserve license and get license key"
Sub_get_licensekey
endif
comment "Installiere ThinPrint Client 8.0 ICA..."
message "Check set for Firewall-Rules"
;Check the System-Version to configure the Firewall
if ($MSOS$ = "5.1")
set $FirewallRulesPath$ = "[" + $FirewallRulesPath$ + "\DomainProfile\GloballyOpenPorts\List]"
Set $TCPRulesName$ = $TCPPort$ + ":TCP"
Set $TCPRule$ = $TCPPort$ + ":TCP:*:Enabled:ThinClient TCP"
Set $UDPRulesName$ = $UDPPort$ + ":UDP"
Set $UDPRule$ = $UDPPort$ + ":UDP:*:Enabled:ThinClient UDP"
else
set $FirewallRulesPath$ = "[" + $FirewallRulesPath$ + "\FirewallRules]"
Set $TCPRulesName$ = "{15B415D5-76C8-4F51-A346-F84B9D0E040B}"
Set $TCPRule$ = "v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|Profile=Domain|LPort=" + $TCPPort$ + "|Name=Thinprint TCP|"
Set $UDPRulesName$ = "{68A18B74-453D-4C73-BE39-805005537059}"
Set $UDPRule$ = "v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=17|Profile=Domain|LPort=" + $UDPPort$ + "|Name=Thinprint UDP|"
endif
DefVar $RegCheck$
Set $RegCheck$ = $FirewallRulesPath$+" "+$TCPRulesName$
set $CompValue$ = GetRegistryStringValue ($RegCheck$)
if not($CompValue$ ="")
message "Schlüssel vorhanden"
Registry_Modify_TP
else
Registry_Add_TP
message "Key created"
endif
if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
Message "Installiere " + $ProductId$ + ". Das kann etwas laenger dauern, bitte Geduld..."
comment "Start setup program"
if (FileExists("%ProgramFilesSysnativeDir%\Citrix\ICA Client\pn.exe"))
comment "installing the plugin"
Winbatch_install_32
endif
; comment "patch the Userprofil"
; Set $InstDest$ = "%CurrentProfileDir%"
; Files_Patch_UserProfil
; if not(fileExists("%DefaultUserProfileDir%\AppData\Roaming\ICAClient\wfcwin32.log"))
; comment "patch the default User5Profile"
; Set $InstDest$ = "%DefaultUserProfileDir%"
; Files_Patch_UserProfil
; endif
comment "ceck the return arguments"
Sub_check_exitcode
endif
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
Message "Installiere " + $ProductId$ + ". Das kann etwas laenger dauern, bitte Geduld..."
comment "Start setup program"
if not (FileExists("%ProgramFilesSysnativeDir%\Citrix\ICA Client\pn.exe"))
comment "installing the plugin"
Winbatch_install_64
endif
; comment "patch the Userprofil"
; Set $InstDest$ = "%CurrentProfileDir%"
; Files_Patch_UserProfil
; if not(fileExists("%DefaultUserProfileDir%\AppData\Roaming\ICAClient\wfcwin32.log"))
; comment "patch the default User5Profile"
; Set $InstDest$ = "%DefaultUserProfileDir%"
; Files_Patch_UserProfil
; endif
comment "ceck the return arguments"
Sub_check_exitcode
endif
endif
;add the firewall - rules for ThinPrint
[Registry_Add_TP]
openkey $FirewallRulesPath$
Add "$TCPRulesName$"=REG_SZ:"$TCPRule$"
Add "$UDPRulesName$"=REG_SZ:"$UDPRule$"
;if existing predefined rules, delete the rules and add the new rules
[Registry_Modify_TP]
openkey $FirewallRulesPath$
DeleteVar "$TCPRulesName$"
DeleteVar "$UDPRulesName$"
Add "$TCPRulesName$"=REG_SZ:"$TCPRule$"
Add "$UDPRulesName$"=REG_SZ:"$UDPRule$"
;retrieve the data for the system
[Sub_OS_Detect]
Set $OS$ = GetOS
if $OS$ = "Windows_NT"
Set $NTVersion$ = GetNTVersion
endif
set $MSOS$ = GetMSVersionInfo
set $Systemtype$ = GetSystemtype
[Winbatch_install_32]
; 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 ================================================================
"$Inst_Prg$" $Inst_Cmd32$
[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 ================================================================
"$Inst_Prg$" $Inst_Cmd64$
[Files_delete_32]
; Example of recursively copying some files into the installation directory:
;
;copy "%ScriptPath%\config.xml" "$InstallTmpDir$\$INSTVersion$.WW"
[Files_Install_Copy]
; copy the installationCD to the local HD
;copy -s "%ScriptPath%\files\*.*" "$InstallTmpDir$"
;copy "%ScriptPath%\config.xml" "$InstallTmpDir$\$INSTVersion$.WW"
[Files_Patch_UserProfil]
;copy -s "%ScriptPath%\files\ICAClient_User\*.*" "$InstDest$\AppData\Roaming\ICAClient"
;copy -s "%ScriptPath%\files\Cache_local\*.*" "$InstDest$\AppData\local\ICAClient\Cache"
[Sub_get_licensekey]
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
[Registry_Add_Firewall]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
Add "$RegName$"=REG_SZ:"$RegValue$"
[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"
comment "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"
comment "complete the install. This message is indicative of a success."
else
logError "Fatal: Setup program gives an unknown exitcode unequal zero: "
logError $ExitCode$
isFatalError
endif
endif
endif
endif
[XMLPatch_config]
OpenNodeSet
- error_when_no_node_existing false
- warning_when_no_node_existing true
- error_when_nodecount_greater_1 false
- warning_when_nodecount_greater_1 true
- create_when_node_not_existing true
- attributes_strict false
documentroot
all_childelements_with:
elementname: "PIDKEY"
attribute: "Value" value="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
end
SetAttribute "Value" value="$LicenseKey$"
=== uninstall.ins ===
[Initial]
LogLevel=9
; Log Errors in Logfile but don't abort:
ExitOnError=false
; Show syntax errors in the script:
ScriptErrorMessages=on
; Dont trace step by step through the script:
TraceMode=off
; let started programs run in front of the winst window
StayOnTop=false
[Actions]
requiredWinstVersion >= "4.10.8.6"
DefVar $MsiId32$
DefVar $UninstallProgram32$
DefVar $MsiId64$
DefVar $UninstallProgram64$
DefVar $Version$
DefVar $MinimumSpace$
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir32$
DefVar $InstallDir64$
Defvar $InstallTmpDir$
DefVar $LicenseRequired$
DefVar $LicensePool$
DefVar $INST_SystemType$
DefVar $INST_architecture$
DefVar $Uninst_Cmd$
DefVar $Uninst_Prg$
DefVar $INSTVersion$
Set $INST_SystemType$ = GetSystemType
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
Set $LogDir$ = "%SystemDrive%\tmp"
; ----------------------------------------------------------------
; - Please edit the following values -
; ----------------------------------------------------------------
Set $ProductId$ = "ThinPrint"
Set $Version$ = "2011"
Set $MinimumSpace$ = "50 MB"
Set $InstallDir32$ = "%ProgramFiles32Dir%\ThinPrint Client"
Set $InstallDir64$ = "%ProgramFiles64Dir%\ThinPrint Client"
Set $LicenseRequired$ = "false"
Set $LicensePool$ = "p_" + $ProductId$
Set $Uninst_Prg$ = "MsiExec.exe"
Set $Uninst_Cmd$ = " /X{4A7DCE09-9A5A-4A75-ACA5-98D13D400816} /quiet"
; the correct uninstall command you are looked in the registry under the Hive
; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
; ----------------------------------------------------------------
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".jpg" $ProductId$
Message "Deinstalliere " + $ProductId$ + ". Bitte etwas Geduld..."
if (FileExists("%ProgramFilesSysnativeDir%\ThinPrint Client\Thnclnt32deu.dll"))
comment "Start uninstall sub section"
Sub "%ScriptPath%\delsub.ins"
comment "delete the default and the user profile data"
; Files_Delete_UserProfil
else
comment "modul not installed"
isFatalError
endif
if $LicenseRequired$ = "true"
comment "Licensing required, free license used"
Sub_free_license
endif
ExitWindows /reboot
[Files_Delete_UserProfil]
delete -s "%CurrentProfileDir%\AppData\Roaming\ICAClient"
delete -s "%CurrentProfileDir%\AppData\local\ICAClient\Cache"
delete -s "%DefaultUserProfileDir%\AppData\Roaming\ICAClient"
delete -s "%DefaultUserProfileDir%\AppData\local\ICAClient\Cache"
[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$)
=== delsub.ins ===
if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
Message "Uninstalling " + $ProductId$ + " 32 Bit..."
comment "Uninstall program found, starting uninstall"
Winbatch_uninstall_32
sub_check_exitcode
endif
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
Message $ProductId$ + " ist nur fuer 32 Bit..."
comment "Fatal: Nur fuer 32 Bit OS!"
isFatalError
endif
[Winbatch_uninstall_32]
$Uninst_Prg$ $Uninst_Cmd$
[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
if ($ExitCode$ = "30066")
comment "looks good: setup program means that the install-Source are corrupted"
else
logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
isFatalError
endif
endif
endif
endif
endif