Troubleshooting scripted printer driver installations
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.