Troubleshooting scripted printer driver installations

May 23rd, 2009

I came across an interesting problem one day when I was trying to install a printer driver in Windows XP through known-working vbscript files. One script was custom made and the other was the built-in prndrvr.vbs file included with the operating system. The same driver that installed without a problem using the Add a Printer wizard won’t install when using vbscript. All I would get back is a simple error code 2.

After referencing Microsoft’s MSDN article on the Win32_PrinterDriver.AddPrinterDriver method, I was pointed to the standard WMI Error Constants page, which then told me to use the system’s built-in net helpmsg command to find out what the error code 2 was: The system cannot find the file specified.

I found that to be odd – how can a file be missing if that same driver package works 100% when using the GUI to install it? To find out what was going on, I made use of the Microsoft SetupAPI log file. Details are available in a whitepaper at Microsoft’s Windows Hardware Developer Central. While the whitepaper goes into extreme details, I only needed to do the basics to determine the cause of this installation failure. I left the SetupAPI log level at 0, which proved to be sufficient.

For simplicity in documentation, I used the existing prndrvr.vbs file that is included in Windows XP. The results of my findings are shown below:

Command entered:
cscript prndrvr.vbs -a -m “HP LaserJet P4010_P4510 Series PCL 6″ -v 3 -e “Windows NT x86″ -i “I:\\Public\\Drivers\\HP LaserJet P4010 Series\\hpc4015c.inf”

Result:
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

Unable to add printer driver HP LaserJet P4010_P4510 Series PCL 6 Win32 error code 2

Result in C:\Windows\Setupapi.log:
[SetupAPI Log]
OS Version = 5.1.2600 Service Pack 3
Platform ID = 2 (NT)
Service Pack = 3.0
Suite = 0×0100
Product Type = 1
Architecture = x86
[2009/05/11 09:49:47 4216.4 Driver Install]
#-198 Command line processed: C:\WINDOWS\system32\wbem\wmiprvse.exe
#I060 Set selected driver.
#I060 Set selected driver.
[2009/05/11 09:49:47 4216.5]
#-198 Command line processed: C:\WINDOWS\system32\wbem\wmiprvse.exe
#-167 SPFILENOTIFY_NEEDMEDIA: Tag = “p6i2enww.cab“, Description= “HP LaserJet P4015/4014/4515 PCL 6 CD”, SourcePath = “i:\ public\drivers\hp laserjet p4010 series”, SourceFile = “UNIDRV.HLP“, Flags = 0×00000000.
#E169 SPFILENOTIFY_NEEDMEDIA: returned FILEOP_ABORT. Error 2: The system cannot find the file specified.
#W187 Install failed, attempting to restore original files.

As it can be seen from the log file, the WMI method Win32_PrinterDriver.AddPrinterDriver could not locate the file p6i2enww.cab, which contains the English localized copy of unidrv.hlp. To help WMI out I simply extracted the unidrv.hlp file from p6i2enww.cab to the folder containing the driver files. Since all the Windows installations I deal with are English localized (and the fact that I don’t know of anyone who actually uses the printer driver help file), forcing an English localization isn’t a problem.

After adding the “missing” file to the install folder and executing the vbscript again the print driver installed without a problem.

Uncategorized

A new beginning…

January 19th, 2009

Stay tuned for future articles on Windows scripting with vbscript and Windows Management Instrumentation.

One of my first posts will be my ongoing enhancement of a remote printer deployment script I originally created to help install a new printer to 30 Windows XP-based computers. This script was later enhanced to support the deployment of different printers based on the subnet the target computer is in. To date this script has been successful installing drivers for the following line of printers: Ricoh Aficio, Canon imageRunner, and HP LaserJet.

As of this writing I have only come across two drivers that failed to install using my remote printer deployment script: HP Color LaserJet 4650dtn and HP LaserJet P4010dtn. These same drivers installed flawlessly when used with the Add Printer Wizard GUI. I was able to find the cause of the driver installation failure when scripted and will be creating a separate article on finding issues like this and “patching” the driver files so that they work properly in a script.

Uncategorized