Often times printing is a simple thing, especially in Windows. The print server hosts all the drivers and the client needs only to point to the server to download the necessary drivers and map to the printer. However some situations aren't quite so simple.
Take for instance printing in a Citrix or other Terminal Server environment. The multi-user environment means that a particular print driver can be loaded dozens of times concurrently, and if it isn't designed to do this then you can be in big trouble. Our environment is a little unique to other TS environments – we host the Terminal Server and Print Server at our location and we have no knowledge of the clients network. The printers are mapped via a logon script from the TS to the PS using model specific drivers and because of our technology model we cant use the Citrix Universal Print Driver. This sets the stage for the issues we are about to see.
Some of the issues we are seeing:
- Printers aren't mapping correctly
- Some printers fail to work intermittently
- Printing works on some servers but not others, and the printers having issues change depending on who is logged in where
- Adobe Acrobat freezes when opening docs
- The issue comes and goes intermittently
So to begin troubleshooting I do my favorite item – I google the issue. Turns out this is a common thing in Citrix and TS environments where some print drivers cause havoc with the spooler, which is tied into just about everything on the computer. So I find a doc by HP that details all their printers that are supported in a Citrix environment (http://support.citrix.com/article/CTX110571) and I remove all that aren't supported. I look at other vendor sites to see about their drivers and find some that are supported in Citrix, some that aren't, and a lot that just don't say. First step down and the environment looks better.
I also notice that our logon script is using a file "prnadmin.dll" to map printers. I have never seen anyone use this before – google does turn up some results – but I wonder if that may be part of the problem. I rewrite the script to use VBScript's oNetwork.MapWindowsPrinterConnection function instead and add in lots of error checking and reporting to ensure things are working properly.
So far so good, the issue appears to be stabilizing – until we added another printer. This specific HP printer doesn't have a PS driver included, instead they state that we should use the HP Universal Print Driver for it. So we install the driver on the Print Server and almost immediately begin having issues, different issues but more common issues.
So I call Microsoft for help and the first tier that I talk to waste most of my day and result in not making any progress on the solution. After I get off the phone with them I realize I can delete the print drivers from all the TS and restart the spooler to make the issue go away so I do that on all the servers to get the users up and running again. Its not a solution, but at least it works.
MS calls back and gives me a process to clear out all the 3rd party print processors and monitors from the servers. I begin hacking the registry as instructed with little success – the issues keep coming up several times a day.
Several more days I spend battling the nightmare when we finally decide to call a Citrix expert. He comes in and almost immediately identifies the HP Universal Print Driver as having issues – that's odd since HP specifically states that it can (and should) be used in a Citrix environment; we were even hoping that this universal driver would be our salvation for this issue. We call a couple other Citrix gurus and they both say the same – the HP UPD has "weird" issues in a Citrix environment. So we uninstall the driver and bump the effected printers to use the HP 4000 drivers that come with Windows.
The Citrix guys do give a glimmer of hope however, the additional steps take of limiting the drivers, processors, and monitors may have already resolved the initial issue, and that the most recent symptoms were caused by the HP UPD. Hmmm… I am skeptical but hopeful, I flush all the drivers from all the Terminal Servers to ensure they are reloaded from the print server and cross my fingers.
A few days later and some issues are occurring. It's the weekend and one of the IT admins are checking out the TSs to ensure they are ready for Monday and she is having lots of problems trying to print. Long story short – the admin had nearly 400 printers mapped in her profile and it was taking several minutes for the spooler to recognize them all. When we logged her out and logged in as a normal user with 3-4 printers mapped things worked fine. I had her remove the other printers from her profile and it sounds like things are working.
Its been a couple more days and only 1 issue has been reported – much better than the 4-5 issues per day. Below are the items done to get things working again.
- Use only print drivers certified to work in a Citrix environment
- Don't use any Version 2 print drivers, only Version 3
- Don't use the HP UPD
- Only use Microsoft default Print Processors and Print Monitors
- Limit the number of printer drivers in use in the environment
- Use delprof.exe (downloadable from MS) to delete old cached profiles
There is probably more, and I doubt this is the final step to resolution, but at least its better.