— darpakiss 2013/02/11 13:21
Tested on Windows 7 64bit
Tested with opsi 4.0.2
required Winst Version >= 4.11.3.1
Files can be downloaded at here
Tree:
CLIENT_DATA check_msi-exitcode.ins delsub.ins install.cfg Kaspersky.key Kaspersky.png Kes10win_x64.msi Kes10win_x86.msi Kes8win_x64.msi Kes8win_x86.msi setup.ini setup.ins uninstall.ins OPSI control
[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_version$
DefVar $Version$
DefVar $Inst_Cmd32$
DefVar $Inst_Cmd64$
DefVar $Inst_Prg32$
DefVar $Inst_Prg64$
DefVar $Uninst_Prg$
Set $INST_SystemType$ = GetSystemType
set $INST_version$ = GetProductProperty("version","8.1")
if ($INST_version$ = "8.1")
Set $Inst_Prg32$ = "Kes8win_x86.msi"
Set $Inst_Prg64$ = "Kes8win_x64.msi"
endif
if ($INST_version$ = "10.1")
Set $Inst_Prg32$ = "Kes10win_x86.msi"
Set $Inst_Prg64$ = "Kes10win_x64.msi"
endif
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$ = "Kaspersky"
Set $Version$ = "10.1"
Set $MinimumSpace$ = "300 MB"
; the path were we find the product after the installation
Set $InstallDir32$ = "%ProgramFilesDir%\TightVNC"
Set $LicenseRequired$ = "false"
Set $LicensePool$ = "p_" + $ProductId$
Set $Uninst_Prg$ = "uninstall.exe"
Set $Inst_Cmd32$ = '/quiet /norestart EULA=1 KSN=1 ALLOWREBOOT=1'
; ----------------------------------------------------------------
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$ + " " + $INST_version$
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
if ($INST_SystemType$ = "x86 System")
Message "Installing " + $ProductId$ + " on 32 Bit..."
comment "Start setup program"
Winbatch_install_32
Sub_check_exitcode
endif
if ($INST_SystemType$ = "64 Bit System")
Message "Installing " + $ProductId$ + " on 64 Bit..."
comment "Start setup program"
Winbatch_install_64
Sub_check_exitcode
endif
endif
ExitWindows /reboot
[Winbatch_install_32]
msiexec /i %ScriptPath%\$Inst_Prg32$ $Inst_Cmd32$
[Winbatch_install_64]
msiexec /i %ScriptPath%\$Inst_Prg64$ $Inst_Cmd32$
[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
[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 $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
DefVar $InstallDir32$
DefVar $InstallDir64$
DefVar $LicenseRequired$
DefVar $LicensePool$
DefVar $INST_SystemType$
DefVar $INST_architecture$
DefVar $DisplayName$
Set $INST_SystemType$ = GetSystemType
Set $LogDir$ = "%SystemDrive%\tmp"
; ----------------------------------------------------------------
; - Please edit the following values -
; ----------------------------------------------------------------
Set $ProductId$ = "Kaspersky"
Set $InstallDir32$ = "%ProgramFilesDir%\Kaspersky"
Set $LicenseRequired$ = "false"
Set $LicensePool$ = "p_" + $ProductId$
; ----------------------------------------------------------------
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $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$)
ExitWindows /reboot
DefStringList $result$
DefStringList $result1$
DefVar $INST_arch$
Set $INST_arch$ = "Both"
DefVar $INST2_SystemType$
Set $INST2_SystemType$ = GetSystemType
DefVar $appKey$
DefVar $UninstallCommandList$
DefVar $UninstallCommandList2$
DefVar $appString$
DefVar $appKeyString$
DefVar $testName$
DefVar $exeString$
Set $appKeyString$ = "DisplayName"
Set $appString$ = "Kaspersky Endpoint Security"
if ($INST2_SystemType$ = "x86 System" OR $INST_arch$ = "Both")
Message "Uninstalling " + $appString$ + " 32 Bit..."
comment "Start setup program"
Set $result$ = getRegistryKeyList32("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for $app$ in $result$ do Sub_searchApp32
endif
if ($INST2_SystemType$ = "64 Bit System" OR $INST_arch$ = "Both")
Message "Uninstalling " + $appString$ + " 64 Bit..."
comment "Start setup program"
Set $result$ = getRegistryKeyList64("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
for $app$ in $result$ do Sub_searchApp64
endif
if not ($UninstallCommandList$ = "")
set $result1$ = splitString($UninstallCommandList$,"::")
for $UninstallCommand$ in $result1$ do Winbatch_Uninstall
sub "%ScriptPath%\check_msi-exitcode.ins"
endif
if not ($UninstallCommandList2$ = "")
set $result1$ = splitString($UninstallCommandList2$,"::")
for $UninstallCommand2$ in $result1$ do Dosbatch_Uninstall
sub "%ScriptPath%\check_msi-exitcode.ins"
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
[Winbatch_Uninstall]
$UninstallCommand$
[Package] version: 4 depends: incremental: False [Product] type: localboot id: kaspersky name: Kaspersky Endpoint Security 10.1 description: Kaspersky Endpoint Security for Windows advice: version: 10.1.0 priority: 0 licenseRequired: False productClasses: setupScript: setup.ins uninstallScript: uninstall.ins updateScript: alwaysScript: onceScript: customScript: userLoginScript: [ProductProperty] type: unicode name: version multivalue: False editable: True description: Which Kaspersky version to install values: ["10.1", "8.1"] default: ["10.1"]