Installing cross-architectural print drivers from the server locally

 

Hello Everyone. This is Digvijay once again with a new blog post about my favorite component – Printing.

Since the release of Windows 2008 and Windows 2008 R2 there have been several times where we get calls from the customers saying that they have built a new 64-bit 2008 or a 2008 R2 print server and now the 32-bit clients are not able to access the print queues since the 32-bit printer drivers are missing. This is a known issue and many of our experts have already blogged about it here here and here. We also have a Knowledge Base article that tells you what needs to be done http://support.microsoft.com/kb/952065 . And that way is to remotely install the drivers from a 32bit client running vista/win7 or 2008 server.

But, what if there is an environment where there are no 32-bit Windows Vista/Windows 7/Windows Server 2008 machines to pull the drivers remotely from? What if you want to add all the 32-bit inbox printer drivers on the server locally so that you don’t have to add the drivers remotely each time you install a new print queue?

Well, recently I got a case where the customer was wanting to do exactly that. He had set up a new Windows Server 2008 64-bit machine which was to be provisioned at his client’s location and all the workstations in his client’s environment were 32-bit Windows XP SP3. He created the print queues for the existing printers and added the 32-bit drivers remotely using steps mentioned in the KB. But the issue that he was facing was that once he gives the server to his client, what will happen if they add some new printers later? From where will he get the 32-bit version of the drivers? How do we make sure that he has all the 32-bit printer drivers available locally on the server all so we don’t need to add the drivers remotely?

There were a few options I was thinking of suggesting. They were:

 

a. Download an evaluation copy of 32-bit Windows 7 or Windows Server 2008 and then install it and follow the above steps mentioned in the KB. Windows 7 Trial can be found at – http://technet.microsoft.com/en-us/evalcenter/cc442495.aspx

b. Use the ImageX tool from the Windows Automated Installation Kit to extract the necessary driver files from an installation disk without installing the 32-bit OS.

c. Download an  evaluation .vhd of Windows Server 2008 and load it on a Virtual Machine (Hyper-V,Virtual Server,Virtual PC) and then add the drivers from there.

 

Once we had the .iso/.vhd file downloaded and a spare server to install, it would have been easy to get all the existing drivers, but what to do about loading all the 32-bit printer drivers that are available to the 64-bit target server?

I am assuming that we didn’t have a spare server to install the 32-bit OS, nor a virtualization solution to use the .vhd downloaded from the above links. In this case, we decided that the second option was the most feasible. So we need to manually extract the files from the Windows Server 2008 32-bit image using Imagex.exe. This is what we needed to do to accomplish this:

 

1. Download and install the Windows Automated Installation Kit (WAIK).

a. Save the program to your computer. (Windows AIK is distributed as an .iso file)

b. Burn the iso image to a DVD or extract the contents directly using other tools.

c. Once the DVD has been mounted/extracted or loaded click Windows AIK Setup to begin the installation.

2. Mount install.wim from the sources directory of the cross-architecture media . (This would be installing a 64-bit driver on an x86 server, or a 32-bit driver on an x64 server. In this example, I am installing 32-bit drivers on a 64-bit server.)

a. Create a folder for extracting the files (e.g., C:\32bitPrinterDrivers).

b. Insert the 32-bit Windows Server 2008/Windows Vista/Windows 7 disk into the appropriate drive.

c. Open a command prompt with administrative credentials (Start Search Programs – cmd.exe right-click Command Prompt, and select Run as administrator).

d. Navigate to the folder where WAIK is installed by typing cd C:\Program Files\Windows AIK\Tools\x64

e. Run the Imagex command using the /mount switch to open the WIM file in read-only mode, using the following command syntax:

imagex /mount <location and name of WIM file> <image number to open > <location of folder created in step a>

For example, to mount the first image of standard Windows Server 2008 install.wim file to path C:\32bitPrinterDrivers, where the d: drive represents the dvd drive where the 32-bit Windows Server 2008 media is loaded, use the following command:

imagex /mount d:\Sources\install.wim 1 C:\32bitPrinterDrivers

 

This will take some time to extract the files. Once the operation is completed, you can browse to the mounted location and see all the 32-bit inbox drivers.

A brief look at the contents of the folder may reveal that the folders which have the name in the format prn<manufacturer>001.inf_<random guid> are the ones that we will be using to install the print drivers. We will also need the ntprint.inf_xxxxxxxx folders. I copied all these files to a new folder and moved them locally to the 64-bit machine. In this case, they were about 981 MB in size. 

NOTE: the files names may differ since the last 8 digits are randomly created.

 

So, once I had the driver files, the rest was easy. From the 64-bit server, open the Printers snap in.

1. Right click the on the Printer already installed for which you want to load a 32bit driver and select Properties.

2. Within the printer’s Properties window select the Sharing tab and click on the Additional Drivers button which will cause the Additional Drivers window to appear.

 

clip_image004

 

3. Within the Additional Drivers window I selected x86 as the processor type and clicked on OK.

 

clip_image006

 

4. Browse to the location where the 32-bit printer driver files are saved, select the manufacturer and point to the ini file within the folder and click OK.

 

clip_image008

 

Once again, the names of the folders containing the printer drivers are in the format – prn<manufacturer>001.inf_<random guid>. So if I had to install a HP driver, I would select the prnhp001.inf_2ade4966 folder. For installing a Brother driver, I would select the prnbr001.inf_a54871ed folder.

 

image

 

image

 

5. Clicking on Open and then OK, we get a list of the all the drivers contained in the package by this manufacturer. Select the appropriate driver from the list and continue the install.

clip_image014

 

6. Once completed, we can verify that the driver has been installed successfully by going to the Additional Drivers section of the Print queue. We can also verify the same by looking at the drivers tab of the Print server properties or in the Print Management Console.

 

clip_image016

 

clip_image018

 

 

So now, once we get a new printer, we can just browse to the 32-bit driver’s directory and get the 32-bit drivers instantly without having to look for a 32-bit machine to add the drivers remotely from.

 

Caution: When sharing 32-bit drivers from a print queue created with 64-bit print drivers, the 32-bit and 64-bit print drivers MUST be the same version. Failure to use matching print drivers could cause a lack of communication between the print server and client, and may result in disrupted or no printing.

We still recommend that installing drivers remotely from the other system is often the only way to get an older OEM print driver to install additional drivers. The process of copying 32-bit print drivers to the 64-bit system and then adding the additional drivers works well with the print drivers that are available inbox.

With that, I come to the end of this post. Please feel free to contact us if you have any questions or suggestions about this post.

Thanks again for stopping by.

Digvijay Nath

Share this post :