This is an old revision of the document!
Scripts and guide by Soren Birk
This package will check if the client is virtual, and if not then result in an isFatalError.
I have only created a setup-script for this package, since i dont see a reason for uninstalling VMware-Tools.
If you want an uninstall-package it should be fairly easy to create since the uninstall-file is located in the InstallDir.
Tested With:
Instructions:
Tree:
├ setup3264.ins ├ setup.exe ├ setup64.exe ├ vmwaretoolslogo.png ├ manifest.txt └ Program Files └ <subfolders/files>
; Author Soren Birk [Actions] requiredWinstVersion >= "4.11.2.6" DefVar $LogDir$ DefVar $ProductId$ DefVar $MinimumSpace$ DefVar $ExitCode$ DefVar $LicenseRequired$ DefVar $LicenseKey$ DefVar $LicensePool$ DefVar $INST_SystemType$ DefVar $INST_architecture$ DefVar $PCModel$ DefStringList $list$ Set $INST_SystemType$ = GetSystemType set $INST_architecture$ = GetProductProperty("install_architecture","system specific") Set $list$ = getOutStreamFromSection("DosInAnIcon_getmodel") Set $PCModel$ = takeFirstStringContaining($list$,"VMware") Set $LogDir$ = "%SystemDrive%\tmp" ; ---------------------------------------------------------------- ; - Please edit the following values - ; ---------------------------------------------------------------- Set $ProductId$ = "vmwaretoolswin" Set $MinimumSpace$ = "50 MB" 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 "Ikke nok plads" else comment "Display product logo" ShowBitmap "%ScriptPath%\vmwaretoolslogo.png" $ProductId$ if contains($PCModel$, "VMware") if $LicenseRequired$ = "true" comment "Licensing required, reserve license and get license key" Sub_get_licensekey endif 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" ChangeDirectory "%SCRIPTPATH%" Winbatch_install_32 Sub_check_exitcode ExitWindows /Reboot 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" ChangeDirectory "%SCRIPTPATH%" Winbatch_install_64 Sub_check_exitcode ExitWindows /Reboot endif else isFatalError "The Computer doesnt seem to be virtual, installation will be skipped." endif endif [Winbatch_install_32] "%ScriptPath%\Setup.exe" /S /v"/qn REBOOT=R" [Winbatch_install_64] "%ScriptPath%\Setup64.exe" /S /v"/qn REBOOT=R" [DosInAnIcon_getmodel] wmic computersystem get model [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