====== removeMSI ====== **CALL:** set $result$ = removeMSI("dummy") **NOTE:** \\ $result$ must be from Type "StringList"\\ ====== Usage ====== Check WINST Manual: \\ [[https://download.uib.de/opsi_stable/doc/html/en/opsi-winst-manual/opsi-winst-manual.html#opsi-winst-commands-localfunctions |9.22. Local functions]] \\ [[https://download.uib.de/opsi_stable/doc/html/en/opsi-winst-manual/opsi-winst-manual.html#opsi-winst-commands-localfunctions|9.23. Import von Library Funktionen]] ===== config ===== Create a file named msi.conf in your %ScriptDir% \\ In this file, you have to include all MSIIDs you want to remove in the following format: \\ Desciption of your Software:{your-msi-id}\\ For example: vcredist_x64_2010:{1D8E6291-B0D5-35EC-8441-6616F567A0F7} ===== Retrurn StringList ===== You will get the following information back (in case of an error): [0] = Description\\ [1] = ExitCode\\ [2] = Error Desciption (If known, otherwise UNKNOWN)\\ In case of ExitCode 0, 1605, 1641 or 3010 you will only get the following Information back: [0] = All Products uninstalled\\ [1] = 0\\ [2] = All Products uninstalled ===== CODE ===== DefFunc RemoveMSI(val $remove$ : string) : stringlist DefStringList $msiidsAndDescription$ DefStringList $transformList$ DefVar $ID$ DefVar $description$ DefVar $ExitCode$ set $msiidsAndDescription$ = loadTextFile ("%scriptpath%\msi.conf") for %i% in $msiidsAndDescription$ do sub_extract_id_and_description [sub_extract_id_and_description] set $transformList$ = splitstring("%i%",":") set $Description$ = takestring(0,$transformList$) set $ID$ = takestring(1,$transformList$) set $transformList$ = emptylist($transformList$) Message "remove "+$Description$ if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $ID$ + "] DisplayName") = "") comment "MSI id " + $ID$ + " found in registry, starting msiexec to uninstall" Winbatch_uninstall_msi sub_check_exitcode endif if not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $ID$ + "] DisplayName") = "") comment "MSI id " + $ID + " found in registry, starting msiexec to uninstall" Winbatch_uninstall_msi sub_check_exitcode endif [Winbatch_uninstall_msi] msiexec /x $ID$ /qb-! REBOOT=ReallySuppress [sub_check_exitcode] set $ExitCode$ = getLastExitCode Switch $ExitCode$ Case "0" comment "Looks good: setup program gives exitcode zero" set $result$ = emptylist($result$) set $result$ = addToList($result$,"All Products uninstalled") set $result$ = addToList($result$,"0") set $result$ = addToList($result$,"All Products uninstalled") EndCase case "1605" set $result$ = addToList($result$,$Description$) set $result$ = addToList($result$,$ExitCode$) set $result$ = addToList($result$,"ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed") EndCase case "1641" set $result$ = addToList($result$,$Description$) set $result$ = addToList($result$,$ExitCode$) set $result$ = addToList($result$,"ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success.") EndCase case "3010" set $result$ = addToList($result$,$Description$) set $result$ = addToList($result$,$ExitCode$) set $result$ = addToList($result$,"ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success.") EndCase DefaultCase Message $exitcode$ set $result$ = addToList($result$,$Description$) set $result$ = addToList($result$,$ExitCode$) set $result$ = addToList($result$,"UNKNOWN") isFatalError EndCase EndSwitch EndFunc ===== Sample usage in delsub.opsiscript ===== All MSI Software Packages defined in the msi.conf file will be removed. importLib "removeMSI.opsiinc" DefStringList $result$ set $result$ = removeMSI("dummy") ===== Questions, bug reports, feature request, or just an idea for new crazy functions ??? ===== This Function is Part of my OPSI-WINST-LIBRARY Bundle, which home is on GitHUB.\\ Feel free to share your Ideas for new functions or contact me there for bug reports. \\ [[https://github.com/Venice-89/OPSI-WINST-Library|OPSI-WINST-Library on GitHUB]]