Table of Contents

TightVNC with the new MSI installer

Since TightVNC 2.5.2 the developer changed to an MSI Installation. If you want you can install only the Viwer or only the Server.

I created a Winst script with some Productproperties to modify the installer. I think it's beta, so some Properties may not work correctly. For example the product property to install the Server in non Service Mode. But you can set the Server Password and you can install only the viewer or only the Server.

For more Information about the new MSI Installer please read this PDF: http://www.tightvnc.com/doc/win/TightVNC-installer-2.5.2.pdf

TightVNC Ver. 2.5.2

Tested with opsi 4.11.2.9
requiredWinstVersion >= Not Tested Files can be downloaded at http://www.tightvnc.com

By — tobias 2012/10/12 08:51

Tree:

├ CLIENT_DATA
│ ├ delsub3264.ins
│ ├ setup3264.ins
│ ├ tightVNC.png
│ ├ uninstall3264.ins
│ ├ vncX86.msi
│ └ vncX64.msi
├ OPSI
│ └ control
</code winst>
 
==== Steps ====
  - Download TightVNC (x64, x86)
 
 
==== setup.ins ====
<code winst>
[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 $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
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                             -
; ----------------------------------------------------------------
;$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$       = "TightVNC"
Set $MinimumSpace$    = "100 MB"
; the path were we find the product after the installation
Set $InstallDir32$      = "%ProgramFiles32Dir%\<path to the product>"
Set $InstallDir64$      = "%ProgramFiles64Dir%\<path to the product>"
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
	; Stop process and set installation status to failed
else
	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$ + " 32 Bit..."
		sub_generate_setupcommand
		comment "Start setup program"
		Winbatch_install_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 "Installing " + $ProductId$ + " 64 Bit..."
		sub_generate_setupcommand
		comment "Start setup program"
		Winbatch_install_64
		Sub_check_exitcode
 
	endif
 
endif
 
[Winbatch_install_32]
 
; === MSI package =======================================================================================
msiexec /i %scriptpath%\vncX86.msi /passive /norestart $setupMSI$ 
 
 
 
[Winbatch_install_64]
; === MSI package =======================================================================================
msiexec /i %scriptpath%\vncX64.msi /passive /norestart $setupMSI$ 
 
 
[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
 
 
;-------------------------------------------------------------------------------
; 			 Generating the Setup command
;-------------------------------------------------------------------------------
[sub_generate_setupcommand]
; Define String and Variables
DefStringList $parameter$ 
;Stringlist for MSI Parameter
DefVar $usepassword$ 
;UsePassword Yes or No
DefVar $password$ 
;The VNC Connection Password
DefVar $setupMSI$ 
;The full MSI Setup command
DefVar $ownParameter$ 
;Variable for define own commands via productproperty
 
; Default Options
DefVar $Mode$
DefVar $ADDLOCAL$
DefVar $VIEWER_ASSOCIATE_VNC_EXTENSION$
DefVar $SERVER_REGISTER_AS_SERVICE$
DefVar $SERVER_ADD_FIREWALL_EXCEPTION$
DefVar $VIEWER_ADD_FIREWALL_EXCEPTION$
DefVar $SERVER_ALLOW_SAS$
 
 
set $Mode$ = GetproductProperty("mode","Server")
set $parameter$= addtolist($parameter$,'ADDLOCAL='+$Mode$ )
 
 
;Viewer Parameter
 
if ($Mode$ = "viewer")
	sub_set_ViewerOptions
else
	if ($Mode$ = "server")
		sub_set_ServerOptions
	else
		if ($Mode$ = "Viewer,Server")
			sub_set_ServerOptions
			sub_set_ViewerOptions
		else
			isFatalError 
			comment "You must set the correct ProductProperty"
		endif
	endif
endif
 
 
;create setup command
for %s% in $parameter$ do set $setupMSI$ = $setupMSI$+" %s%"
comment $setupMSI$
 
 
[sub_set_ViewerOptions]
set $VIEWER_ASSOCIATE_VNC_EXTENSION$ = GetproductProperty("VIEWER_ASSOCIATE_VNC_EXTENSION","1")
set $VIEWER_ADD_FIREWALL_EXCEPTION$ = GetproductProperty("VIEWER_ADD_FIREWALL_EXCEPTION","1")
set $parameter$= addtolist($parameter$,"VIEWER_ASSOCIATE_VNC_EXTENSION="+ $VIEWER_ASSOCIATE_VNC_EXTENSION$ )
set $parameter$= addtolist($parameter$,"VIEWER_ADD_FIREWALL_EXCEPTION="+ $VIEWER_ADD_FIREWALL_EXCEPTION$ )
 
 
[sub_set_ServerOptions]
set $SERVER_REGISTER_AS_SERVICE$ = GetproductProperty("SERVER_REGISTER_AS_SERVICE", "0")
set $SERVER_ADD_FIREWALL_EXCEPTION$ = GetproductProperty("SERVER_ADD_FIREWALL_EXCEPTION", "1")
set $SERVER_ALLOW_SAS$ = GetproductProperty("SERVER_ALLOW_SAS", "1")
set $password$ = "VALUE_OF_PASSWORD="+GetProductProperty('passwort', 'passwort')
 
 
set $parameter$= addtolist($parameter$,"SERVER_REGISTER_AS_SERVICE="+ $SERVER_REGISTER_AS_SERVICE$ )
 
 
 
if ($SERVER_REGISTER_AS_SERVICE$ = "1") 
	set $parameter$= addtolist($parameter$,"SERVER_ADD_FIREWALL_EXCEPTION="+ $SERVER_ADD_FIREWALL_EXCEPTION$ )
	set $parameter$= addtolist($parameter$,"SERVER_ALLOW_SAS="+ $SERVER_ALLOW_SAS$)
 
	if ($usepassword$ = "yes")
		set $parameter$= addtolist($parameter$,"SET_USECONTROLAUTHENTICATION=1 ")
		set $parameter$= addtolist($parameter$,"VALUE_OF_USEVNCAUTHENTICATION=1 ")
		set $parameter$= addtolist($parameter$,"SET_PASSWORD=1 ")
		set $parameter$= addtolist($parameter$,$password$  )
	else
		comment ="No Password set"
	endif
 
else
	comment = "Server is not registered as service"
endif
 
 
 
 
;------- End -------------------------------------------------------------------
;-------------------------------------------------------------------------------

uninstall.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/credits/
 
[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 $LicenseRequired$
DefVar $LicensePool$
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$       = "TightVNC"
Set $InstallDir32$    = "%ProgramFiles32Dir%\TightVNC"
Set $InstallDir64$    = "%ProgramFiles64Dir%\TightVNC"
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
; ----------------------------------------------------------------
 
 
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
 
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$)

delsub.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/credits/
 
 
Set $MsiId32$ = '{1ACD399C-7F26-43A6-9F16-3AB28F63FDC7}'
Set $UninstallProgram32$ = $InstallDir32$ + "\uninstall.exe"
 
Set $MsiId64$ = '{BC994A59-6E98-4203-8A35-819938DD5ED1}'
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$ + " 32 Bit..."
 
	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
	comment "Cleanup registry"
	Registry_uninstall /32Bit
endif
 
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
	Message "Uninstalling " + $ProductId$ + " 64 Bit..."
 
	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_64 /64Bit
	comment "Cleanup registry"
	Registry_uninstall /64Bit
endif
 
comment "Delete program shortcuts"
LinkFolder_uninstall
 
[Winbatch_uninstall_32]
; Choose one of the following examples as basis for program uninstall
;
; === Nullsoft Scriptable Install System ================================================================
; "$UninstallProgram32$" /S
;
; === Inno Setup ========================================================================================
; "$UninstallProgram32$" /silent /norestart /SUPPRESSMSGBOXES
 
 
[Winbatch_uninstall_msi_32]
msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress
 
[Files_uninstall_32]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
; delete -sf "$InstallDir32$\"
 
[Winbatch_uninstall_64]
; Choose one of the following examples as basis for program uninstall
;
; === Nullsoft Scriptable Install System ================================================================
; "$UninstallProgram64$" /S
;
; === Inno Setup ========================================================================================
; "$UninstallProgram64$" /silent /norestart /SUPPRESSMSGBOXES
 
 
[Winbatch_uninstall_msi_64]
msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress
 
[Files_uninstall_64]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
; delete -sf "$InstallDir64$\"
 
[Registry_uninstall]
; Example of deleting a registry key:
;
; deletekey [HKEY_LOCAL_MACHINE\Software\$ProductId$]
 
[LinkFolder_uninstall]
; Example of deleting a folder from AllUsers startmenu:
;
; set_basefolder common_programs
; delete_subfolder $ProductId$
;
; Example of deleting a shortcut from AllUsers desktop:
;
; set_basefolder common_desktopdirectory
; set_subfolder ""
; delete_element $ProductId$
 
[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
[Package]
version: 1
depends: 
incremental: False

[Product]
type: localboot
id: tightvnc
name: TightVNC
description: VNC Viewer und Server
advice: Kostenfrei
version: 2.5.2
priority: 0
licenseRequired: False
productClasses: 
setupScript: setup3264.ins
uninstallScript: uninstall3264.ins
updateScript: 
alwaysScript: 
onceScript: 
customScript: 
userLoginScript: 

[ProductProperty]
type: unicode
name: mode
multivalue: False
editable: False
description: Server, Viewer or Server and Viewer
values: ["Server", "Viewer", "Viewer,Server"]
default: ["Viewer"]

[ProductProperty]
type: unicode
name: viewer_associate_vnc_extension
multivalue: False
editable: False
description: Viewer mit VNC extension verkuepfen
values: ["0", "1"]
default: ["1"]

[ProductProperty]
type: unicode
name: viewer_add_firewall_exception
multivalue: False
editable: True
description: viewer: Firewall Ausnahme definieren
values: ["0", "1"]
default: ["1"]

[ProductProperty]
type: unicode
name: server_register_as_service
multivalue: False
editable: False
description: Server: Wird als Dienst ausgefhrt
values: ["0", "1"]
default: ["0"]

[ProductProperty]
type: unicode
name: server_add_firewall_exception
multivalue: False
editable: False
description: Server: Firewall Ausnahme
values: ["0", "1"]
default: ["1"]

[ProductProperty]
type: unicode
name: server_allow_sas
multivalue: False
editable: False
values: ["0", "1"]
default: ["1"]

[ProductProperty]
type: unicode
name: usepassword
multivalue: False
editable: False
description: Yes/No
values: ["no", "yes"]
default: ["yes"]

[ProductProperty]
type: unicode
name: passwort
multivalue: False
editable: True
description: Server Passwort
values: ["passwort"]
default: ["passwort"]

[Changelog]
tightvnc (2.5.2-1) testing; urgency=low

  * Initial package

Old Version with EXE installer

Tested with opsi 4.0.1
requiredWinstVersion >= 4.10.8.6
For 32 Bit
Installation files at http://www.tightvnc.com/download.php

Send questions to Thomas_H 2011/10/28 14:54

Tree:

TightVNC.jpg
TightVNC.reg
Tightvnc_win7.reg
delsub.ins
setup.ins
tightvnc_*version*-setup.exe
uninstall.ins

Hint: The reg-files set predefined options for the whole network. Install TightVNC on a test-system, define the tightvnc-server, define a password and open the registry.
Save the following trees to the defined reg-files listed in the tree.

Windows XP: HKLM\Software\TightVNC\Server
Win7 : HKLM\Software\Wow6432Node\TightVNC\Server

setup.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 $UninstallProgram32$
DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ProductId$
DefVar $MinimumSpace$
DefVar $InstallDir32$
DefVar $InstallDir64$
DefVar $ExitCode$
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $INST_SystemType$
DefVar $INST_architecture$
DefVar $Version$
DefVar $Inst_Cmd32$
DefVar $Inst_Cmd64$
DefVar $Inst_Prg$
DefVar $Uninst_Prg$
 
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$       = "TightVNC"
Set $Version$         = "2.0.4"
Set $MinimumSpace$    = "3 MB"
; the path were we find the product after the installation
Set $InstallDir32$      = "%ProgramFilesDir%\TightVNC"
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
Set $Inst_Prg$        = "tightvnc-2.0.4-setup.exe"
Set $Uninst_Prg$      = "uninstall.exe"
Set $Inst_Cmd32$      = '/S'
; ----------------------------------------------------------------
 
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
        comment "Show product picture"
        ShowBitmap "%ScriptPath%\" + $ProductId$ + ".jpg" $ProductId$
 
        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 "installing"
 
        if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
                Message "Installing " + $ProductId$ + " 32 Bit..."
                comment "Start setup program"
                Winbatch_install_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 "Installing " + $ProductId$ + " 64 Bit..."
                comment "Start setup program"
                Winbatch_install_64
                Sub_check_exitcode
        endif
 
endif
 
[Winbatch_install_32]
%ScriptPath%\$Inst_Prg$ $Inst_Cmd32$
regedit /S "%ScriptPath%\TightVNC.reg"
 
[Winbatch_install_64]
%ScriptPath%\$Inst_Prg$ $Inst_Cmd32$
regedit /S "%ScriptPath%\TightVNC_win7.reg"
 
[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

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 $UninstallProgram32$
DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir32$
DefVar $InstallDir64$
DefVar $LicenseRequired$
DefVar $LicensePool$
DefVar $INST_SystemType$
DefVar $INST_architecture$
DefVar $Inst_Cmd$
DefVar $Inst_Prg$
 
Set $INST_SystemType$ = GetSystemType
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
 
 
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "TightVNC"
Set $InstallDir32$    = "%ProgramFilesDir%\TightVNC"
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
Set $Inst_Prg$        = "uninstall.exe"
Set $Inst_Cmd$        = '/S'
; ----------------------------------------------------------------
 
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".jpg" $ProductId$
 
Message "Uninstalling " + $ProductId$ + " ..."
 
if FileExists("%ScriptPath%\delsub.ins")
        comment "Start uninstall sub section"
        Sub "%ScriptPath%\delsub.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$)

delsub.ins

killtask "tvnserver.exe"
 
if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
        Message "Uninstalling " + $ProductId$ + " 32 Bit..."
 
        if FileExists($UninstallProgram32$)
                comment "Uninstall program found, starting uninstall"
                Winbatch_uninstall_32
                comment "Removing "+$InstallDir32$
                Files_uninstall_32
                sub_check_exitcode
        endif
Mendif
 
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
        Message "Uninstalling " + $ProductId$ + " 64 Bit..."
 
; Achtung, nachfolgende Hinweise auf ...32 sind keine Fehler - TightVNC gibt es derzeit nur als 32-Bit-Variante!
        if FileExists($UninstallProgram32$)
                comment "Uninstall program found, starting uninstall"
                Winbatch_uninstall_32
                comment "Removing "+$InstallDir32$
                Files_uninstall_32
                sub_check_exitcode
        endif
endif
 
[Winbatch_uninstall_32]
"$InstallDir32$\$Inst_Prg$" $Inst_Cmd$
 
[Files_uninstall_32]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
delete -sf "$InstallDir32$\"
 
[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