1E AppClarity – Reclaiming Complex Applications

1E AppClarity has the ability to automatically uninstall software, on a per-application basis. This can be controlled by software reclaim policies depending if the application has not been used in the past 90 days or even if you want to prohibit specific applications. One of the benefits of removing unused software is that it avoids the additional cost of purchasing licenses (for new installations) when they weren’t even required in the first place. This is of course great news for the IT department and the software license budget.

1E AppClarity has the advantage of being able to automatically uninstall applications that were originally installed using the Microsoft Windows Installer (MSI) technology. Using Microsoft ConfigMgr, an agentless AppClarity Reclaimer utility is advertised to the client computers. This utility queries the 1E AppClarity server for any unused applications for the local computer, and can then proceed to automatically uninstall these applications. Magic!

Automating the Uninstallation of Applications

1E AppClarity has the intelligence to uninstall the majority of applications in our organisations. Ensuring 1E AppClarity can uninstall a specific application is a simple process. Ideally we would test this in a lab. And wanting to be proactive, we can discover if 1E AppClarity can uninstall an application (using the vendors’ MSI), by using the Reclaimer utility on a computer that has the application already installed.

Testing the AppClarity Reclaimer process

In the following example, we want to test the uninstallation of Adobe Acrobat Reader. We need to specify the Display Name of the application to uninstall, which can be found in the Add/Remove programs registry (HKLM\SOFTWARE\Microsoft\Windows\Current Version\Uninstall\[Product]\DisplayName), as shown below:

C:\>AppClarity.SoftwareReclaimer.exe -mode mandatory -nowait -product "Adobe Reader X (10.0.1)"

RequestMode:MANDATORY
Will not wait before requesting uninstall policy.
Product Description: Adobe Reader X (10.0.1)
Will attempt to uninstall 'Adobe Reader X (10.0.1)'.
About to try reading 32bit registry key.
Matched displayName: Adobe Reader X (10.0.1)
Retrieved uninstall string: /i{ac76ba86-7ad7-1033-7b44-aa0000000001}
Updated uninstall string: /x{ac76ba86-7ad7-1033-7b44-aa0000000001 /qn REBOOT=ReallySuppress /l C:\AMP.SoftwareReclaimer.log
Beginning uninstall - This may take a few minutes.
Application uninstalled successfully.

C:\>

It’s very simple and easy, however it’s not always plain sailing, and sometimes the vendor has complicated our lives by using additional installation tools, such as “setup.exe”.

Reclaiming applications that aren’t real MSI’s

Software vendors sometimes complicate application installations by using a bootstrap executable, such as “setup.exe” to pass environment or additional variables to the actual MSI. Typical examples include Microsoft Office and Adobe Creative Suite.

So let’s take a look at Adobe Creative Suite; 1E AppClarity is intelligent and knows that a specific application can actually be part of a larger application suite. For example, Adobe Photoshop could be installed individually, or it could be installed as part of the Adobe Creative Suite. The installation of Adobe Creative Suite is initiated by a “setup.exe” bootstrap that accepts a custom configuration file (generated by the Adobe Application Manager) to automate the installation of selected products within the suite. Looking at the Add/Remove programs registry (HKLM\SOFTWARE\Microsoft\Windows\Current Version\Uninstall) again we can see that each individual application of the Adobe Creative Suite is installed using a MSI, but have non-MSI uninstall strings, such as:

UninstallString="C:\Program Files\Common Files\Adobe\OOBE\PDApp\core\PDApp.exe" –appletID="DWA_UI" –appletVersion="1.0" –mode="Uninstall" –mediaSignature="{A1BC7068-C1BA-410F-8B9A-DB807C803DE2}"

Using the above command-line does not result in an automated and silent uninstallation of the application, so we must take additional action to do so.

As AppClarity attempts to uninstall applications using the vendors native MSI, we need to expand on this and utilise the custom command-line feature. This enables us to provide AppClarity (and the Reclaimer utility) with the necessary knowledge to silently uninstall the requested application.

When we used Adobe Application Manager to generate the custom configuration file to install Adobe Creative Suite, it also produced an uninstall configuration file called “uninstall_[language].xml” (found within the “deploy” folder). It is this XML file that we can use to perform the silent uninstallation.

Create a batch file or script that includes the necessary logic to perform the uninstallation. The following batch file uninstalls the entire Adobe Creative Suite:

@ECHO OFF
SET WORKINGDIRECTORY=%dp0%
"C:\Program Files\Common Files\Adobe\OOBE\PDApp\DWA\Setup.exe" –mode=Silent –deploymentFile="%WORKINGDIRECTORY%uninstall-en_GB.xml"

The return code of this batch file will be sent back to AppClarity in order to report a success/failure of the uninstallation.

Sticking it all together

Now that we have discovered the vendors specific command-line to uninstall Adobe Creative Suite, we need to wrap it all up together and add it to our 1E AppClarity Reclaimer package in ConfigMgr.

The first step is to add the (previously created) batch file to the Adobe Creative Suite Design custom command-lines within the AppClarity Console, as shown below:

1E AppClarity Console - Custom Command Lines

Now that we have configured the specific software reclaim policy, we need to update the 1E AppClarity Reclaimer package in ConfigMgr. Include the batch file in the package in a new sub-folder called “Resource”, as shown below:

Explorer windows showing path and files

I also have a helper script (called “AppClarity_HelperScript.vbs”) that the 1E AppClarity Reclaimer program in ConfigMgr is configured to run. This script is responsible for copying the package source files (and any additional resource files) to the local computer, and then executes the Reclaimer utility.

' AppClarity_HelperScript.vbs
' This VBScript is used to pre-stage some additional files on client computers for 1E AppClarity Reclaimer, in order to uninstall further applications.
' Script not supported.

strAppClarityServer = "http://[AppClarityServerName]:8335/AppClarity/services/softwarereclaimer"

Set objShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strCurrentPath = objFSO.GetAbsolutePathName(".")

' Create local folders
On Error Resume Next
objFSO.CreateFolder "C:\Program Files\1E"
objFSO.CreateFolder "C:\Program Files\1E\AppClarity"
objFSO.CreateFolder "C:\Program Files\1E\AppClarity\Reclaimer"
objFSO.CreateFolder "C:\Program Files\1E\AppClarity\Reclaimer\Resource"
On Error Goto 0

' Copy source files to local folder
objFSO.CopyFile strCurrentPath & "\*", "C:\Program Files\1E\AppClarity", TRUE
objFSO.CopyFolder strCurrentPath & "\Resource", "C:\Program Files\1E\AppClarity\Resource", TRUE

' Create the command line and run
the Reclaimer
strReclaimCMD = CHR(34) & "C:\Program Files\1E\AppClarity\AppClarity.SoftwareReclaimer.exe" & CHR(34) & " –mode Mandatory –service " & strAppClarityServer
retval = objShell.Run(strReclaimCMD, 1, TRUE)
WScript.Quit(retval)

Finally…

In this example, we discovered how AppClarity is capable of uninstalling applications that were installed using the vendors native MSI yet required some additional action to compensate for a “setup.exe” bootstrap.

All 1E products are sold with Professional Services bundled as a part of an overall solution. This is because 1E believes that delivering successful, well managed deployments lead to the end customer achieving a successful and fully operational environment, while providing detailed training and documentation during the engagement.

Share this post

Share this post on your favourite social media platform.

Find this article useful?

If so please click here