Microsoft

Deploy Acrobat Reader 6 with KiXtart

The KiXtart scripting language can save you time and effort when deploying software. Find out how it can help you deploy Adobe Acrobat Reader 6 throughout your organization.


Whether you need to map network drives for groups of users, make registry modifications to multiple machines, or quickly deploy software throughout your organization, login scripts can save you time and effort. Several scripting "languages" exist, such as Windows native shell scripting, Visual Basic Scripting Edition, JavaScript, Perl, and KiXtart. Of course, you will want to choose one with the capabilities that fit your needs, but my favorite by far is KiXtart.

Originally shipped with the Windows NT Resource Kit as a 16-bit application, KiXtart was an extremely useful and robust tool when I first used it years ago. Since then, it's taken on a 32-bit flavor and is even more powerful than before. Ruud van Velsen, KiXtart's creator, calls his creation "careware" and asks that users contribute money to a variety of charities. You can download the latest version of KiXtart and the extensive user's manual from KiXtart.org.

To illustrate the power of KiXtart, I'm going to show you how it can be used to deploy Adobe Acrobat Reader 6. In a previous article, I explained how to create an unattended installation package that would silently install Acrobat Reader 6. Building on that article, I will now show you how to deploy that package using KiXtart. Although the details of the script I will share in this article are specific to Reader 6, the concepts and much of the code are transferable to any application.

Note: Before you go any further, I highly recommend you read the article mentioned above. It explains how to download the Acrobat Reader 6 executable installation file from the Adobe Web site and extract its separate parts (MSI, CAB, INI, and so forth), which are needed for the following script to work.

Determine your script's flow
As with any script, flow is the all-important aspect. Keep your script modular and simple, and it will be better able to handle unexpected issues. The general flow of the Reader 6 script is as follows:
  1. Determine whether Microsoft Installer 2.x is installed; if not, upgrade.
  2. Determine whether Acrobat Reader 5.x is installed; if so, uninstall.
  3. Determine whether Acrobat Reader 6 is installed; if not, install.

Listing A shows the complete Reader6.KIX script. Now that you have established the script's basic flow, look at each step in detail.

Microsoft Installer—2.x prerequisite
Although it's not explicitly stated on the Adobe Web site, I suspect that the new installation of Reader 6 requires Microsoft Installer 2.x. Even if MSI 2.x is not required, it's a good opportunity to update any of outdated versions of MSI on your systems. Microsoft Installer comes in two versions, one for Windows NT 4 (SP6)/Windows 2000 and another for Windows 9X/Me. Be sure to properly check the prerequisites and use the right upgrade program. The subroutine CHKINSTALLER, which appears in Listing A, uses the string value $msi to represent the current version of Microsoft Installer. The first character of the string indicates whether it's version 1.x. Also, if an upgrade of MSI is required, it will be installed from S:\Windows\Installer. This should be consistent across all your servers. By avoiding the use of UNCs for paths, you can write generic scripts that can be deployed in any location.

Acrobat Reader 5—uninstall
The next step is to uninstall Acrobat Reader 5.x, if it's installed. I suppose if you wanted to be thorough, you could also check for versions beyond 5.x, but a single version check for now will suffice.

The uninstall string for Acrobat Reader 5 is in the Registry in this section:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Acrobat 5.0\UninstallString

The complete uninstall string (Listing B) can be broken into three parts:
  • The uninstall executable Isuninst.exe
  • The location parameter option for the uninstall log file—in this case, f\"C:\ Program Files\Common Files\Adobe\Acrobat 5.0\NT\Uninst.isu\
  • The DLL that's called—in this example, -c\"C:\Program Files\Common Files\Adobe\Acrobat 5.0\NT\Uninst.dll

Separating the uninstall string into three sections allows us to more easily see what is being executed and also shows us where to insert the parameter to perform a quiet uninstall. To uninstall in quiet mode, insert –y between the first and the second sections of the uninstall string—for example, Isuninst.exe –y –f "C:\Program Files\Common…. The UNINSTAR5 subroutine in Listing A handles the uninstallation of Reader 5.x. For a complete listing of command line parameters for InstallShield's Isuninst.exe, check out this InstallShield support page.

Acrobat Reader 6—installation
The final portion of the script deals with the actual installation of Acrobat Reader 6. The process is basic, but before installing (or not), you have to determine whether Reader 6 is already installed. If it already exists, the command line parameter is different. To determine Reader 6 pre-existence, a subroutine called MSIPARAM is called. Within that section, three checks are made:
  • Does the Reader 6 executable exist (typically C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe)?
  • Is the AcroRd32.exe version 6?
  • Does a registry key exist that indicates the installation of Reader 6 (HKLM\SOFTWARE\Adobe\Acrobat Reader\6.0\Language\Current)?

If these criteria are met, set the MSI installation option to /fa, which forces a fresh installation. If the criteria come up short, use the regular /i option to install the package. For a complete listing of Microsoft Installer command line options check out Microsoft Knowledge Base article 314881.

Launching Reader6.KIX
Now that you know how Reader6.KIX works, all that's left to do is to execute the script from each machine on which you want to install Acrobat Reader 6. You can do this from within a batch file or via a login script by executing the command s:\acrobat\reader6\wkix32 s:\acrobat\reader6\reader6.kix /i.

Editor's Picks