Legacy: Silently Install Crystal Reports Viewer 2

File this one under PITA.

As part of our #XPMustDie campaign we sometimes come across old software that simply cannot be updated in time. It’s usually some bespoke system that will take a lot of time and money to re-write or upgrade. In my opinion, it is better to get the OS secure and let an old legacy app run, than to keep a dusty Windows XP PC just for the use of one program. Of course, the ideal solution may be to virtualise the app but if you don’t have the infrastructure in place already then that may be cost-prohibitive or time consuming as well.

One such app we need to use is  Crystal Reports Viewer 2.0. This is completely unsupported by the publisher (SAP) and means it is very difficult to track down files or documentation.

It actually installs and runs fine on Windows 7 Pro (x64) but it does give a pesky error

CrystalViewer Setup

An error occurred while registering the file ‘C:\Windows\system32\PDADDIN.DLL’

I’ve no idea what the PDAddIn.dll does but everything we do with the app seems to work fine without it.

You also get the usual “The file you are trying to install is older than the one on your system. Do you want to keep it?” message. In Crystal Viewer, that comes up for MSVCRT.DLL.

The problem with this, is that it makes it impossible to install the app silently. This is then a headache if you wanted to deploy via a script,  group policy,  Microsoft Deployment Toolkit, System Center etc.

Luckily I found this superb article Silent Installs and Visual Basic 6 Setup Packages. In here, it explains how you can edit a SETUP.LST file to ignore the problematic files and carry on as normal. SETUP.LST should already be one of the files in your installation folder alongside SETUP.exe.

After I removed the offending lines I could then use the silent install command to deploy the app.

A note about the silent install command itself. It should be setup.exe -s<logfile> but it wasn’t working for me at first. Check these things if you are getting an “Invalid command-line arguments. Unable to continue.” error

  • The -s must be in lowercase
  • The <logfile> must be specified
  • There is no space between -s and <logfile>
  • When I used -sC:\temp\CrystalViewer-Setup.log the log file was truncated to CrystalViewer without a file extension. I’m guessing it was the hyphen that did it but there may be a file length restriction

The command that worked for me was setup.exe -s%TEMP%\Crystal.log

For completeness, here is the contents of my SETUP.LST file

SetupText=Copying Files, please stand by.

[Bootstrap Files]
File1=@VB6STKIT.DLL,$(WinSysPathSysFile),,,7/15/00 1:00:00 AM,101888,
File2=@COMCAT.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,5/31/98 1:00:00 AM,22288,4.71.1460.1
File3=@olepro32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/4/04 1:56:46 AM,83456,5.1.2600.2180
File4=@stdole2.tlb,$(WinSysPathSysFile),$(TLBRegister),,7/22/01 2:39:20 AM,17920,3.50.5014.0
File5=@asycfilt.dll,$(WinSysPathSysFile),,,8/4/04 1:56:42 AM,65024,5.1.2600.2180
File6=@oleaut32.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,8/4/04 1:56:46 AM,553472,5.1.2600.2180
File7=@msvbvm60.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,2/23/04 1:00:00 AM,1386496,




[Setup1 Files]
File1=@0.REG,$(AppPath),0.REG,,4/11/05 4:55:19 PM,161,
File2=@mscomctl.ocx,$(WinSysPath),$(DLLSelfRegister),$(Shared),3/9/04 1:00:00 AM,1081616,
File3=@comdlg32.ocx,$(WinSysPath),$(DLLSelfRegister),$(Shared),3/9/04 1:00:00 AM,152848,
File4=@keycode.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(dllSelfRegister),$(Shared),7/5/02 5:13:16 AM,221184,
File5=@u2ddisk.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:32:21 AM,49152,
File6=@u2ftext.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:29:59 AM,155648,
File7=@crtslv.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(dllSelfRegister),$(Shared),7/5/02 5:12:42 AM,30793,
File8=@ExportModeller.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(dllSelfRegister),$(Shared),7/12/02 10:26:29 AM,495688,
File9=@crxf_pdf.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:26:59 AM,389175,
File10=@crxf_xls.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:28:35 AM,405571,
File11=@crxf_wordw.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:27:35 AM,163897,
File12=@crxf_rtf.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/12/02 10:27:18 AM,163895,
File13=@exlate32.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 1:10:40 AM,671801,
File14=@querybuilder.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 12:50:06 AM,163911,
File15=@crdb_odbc.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/15/02 12:43:58 AM,373836,
File16=@crdb_dao.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 12:51:56 AM,217152,
File17=@crdb_ado.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/17/02 12:44:36 AM,368704,
File18=@crqe.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(dllSelfRegister),$(Shared),7/6/02 12:44:46 AM,1417289,
File19=@Implode.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),12/2/96 12:00:00 AM,18944,
File20=@sscsdk80.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),6/26/02 3:00:12 PM,1273856,
File21=@u25samp1.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:14:36 AM,24576,
File22=@u25dts.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:13:28 AM,24576,
File23=@u252000.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:13:12 AM,24576,
File24=@u2lfinra.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:14:18 AM,69632,
File25=@u2lexch.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:14:00 AM,28672,
File26=@u2ldts.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:13:40 AM,24576,
File27=@u2lcom.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:12:26 AM,106496,
File28=@u2l2000.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:12:42 AM,24576,
File29=@ufmanager.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/16/02 3:37:36 PM,225280,
File30=@crtowords_en.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,,$(Shared),7/5/02 4:14:54 AM,24576,
File31=@craxdrt9.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(dllSelfRegister),$(Shared),7/15/02 3:42:21 AM,6135873,
File32=@crviewer9.dll,$(CommonFiles)\Crystal Decisions\2.0\bin,$(DLLSelfRegister),$(Shared),7/5/02 5:14:30 AM,770816,
File33=@CrystalViewer.exe,$(AppPath),,,4/11/05 4:43:35 PM,57344,

Learning about the LST file has really helped speed up our deployment so thanks again to Joe Robinson for educating me 🙂


What do you think?

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s