The scenario is as follows, you have set up your Windows 2008 machine to be using “Internet Printing”.

After having set this up you will have the following directory created on your machine:

 

C:\Windows\Web\Printers

 

In IIS manager you will have this directory setup as a virtual directory:

 

 

Now you try to add a printer by using http. I.e on the client machine you go to “Control Panel”, then “Devices and Printers”, then you select “Add Printer”.

Here you select the option “Select a shared printer by name” and enter the printer name with the http:// prefix. For example:

 

http://yourserver/Printers/SpikePrint/.printer

 

This will then give the following error:

 

Connect to Printer

 

Windows couldn’t connect to the printer. Check the printer name and try again.

If this is a network printer, make sure that the printer is turned on, and that the printer address is correct.

 

 

There are two possible reasons for this. Or rather, two that I have found:

Reason #1:

 

The application pool being used is running as 32 bit on a 64 bit machine.

In other words, the “enable32BitAppOnWin64” property for the application pool is set to “true".

If you look in the IIS logs and see this:

 

<date><time> GET /Printers/SpikePrint/.printer - 80 <user> <ip> Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) 500 0 126 15

 

Or if you use a browser and navigate to the address you used for the printer and you get this:

 

HTTP Error 500.0 - Internal Server Error

There is a problem with the resource you are looking for, so it cannot be displayed.

Detailed Error Information

 

Module  IsapiModule

Notification ExecuteRequestHandler

Handler  AboMapperCustom-12305953

Error Code 0x8007007e

Requested URL http://yourserver/Printers/SpikePrint/.printer

Physical Path C:\Windows\web\printers\SpikePrint\.printer

 

Then if checking the 126  error shown for the error in the IIS logs with “net helpmsg” you will see this:

 

C:\Windows\system32>net helpmsg 126

The specified module could not be found.

 

And/or checking the 0x8007007e seen in the error page with the ERR tool ( http://www.microsoft.com/en-us/download/details.aspx?id=985 ) you will see this:

 

C:\ERR>err 0x8007007e

  ERROR_MOD_NOT_FOUND                                          

# The specified module could not be found.

 

So now we know that a module can’t be found. And in this case it is this one:

 

C:\Windows\system32\msw3prt.dll

 

 

As you can see, this is in the 64 bit Windows location and not in the 32 bit Windows location (i.e.: C:\Windows\SysWOW64 ).

 

So in short, the solution here is to change the application pool used so that it runs in 64 bit mode. This will allow the msw3prt.dll to be found.

Change this in the advanced settings for the application pool by setting the “enable32BitAppOnWin64” property for the application pool is set to “FALSE".

 

 

Reason #2:

 

You are missing the handler mapping altogether.

In other words IIS do not know what to do with the request since it doesn’t know how to handle the .printer extension.

If you look in the IIS logs and see this:

 

<date><time> POST /Printers/SpikePrint/.printer - 80 <user> <ip> Internet+Print+Provider 404 0 2 0

 

Or if you use a browser and navigate to the address you used for the printer and you get this:

 

Module  IIS Web Core

Notification MapRequestHandler

Handler  StaticFile

Error Code 0x80070002

Requested URL http://<yourserver>/Printers/SpikePrint/.printer

Physical Path C:\Windows\web\printers\SpikePrint\.printer

 

You are most likely getting issues because of this.

 

Then if checking the 2 error shown for the error in the IIS logs with “net helpmsg” you will see this:

 

C:\Windows\system32>net helpmsg 2

The system cannot find the file specified.

 

And/or checking the 0x80070002 seen in the error page with the ERR tool ( http://www.microsoft.com/en-us/download/details.aspx?id=985 ) you will see this:

 

C:\ERR>err 0x80070002

# for hex 0x80070002 / decimal -2147024894 :

  COR_E_FILENOTFOUND

 

In this case you can add the handler in the Handler Mappings in IIS Manager. Or simply add a web.config file (or edit an existing one) with the following content:

 

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <handlers>

            <add name="AboMapperCustom" path="*.printer" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\System32\msw3prt.dll" resourceType="Unspecified" preCondition="bitness64" />

        </handlers>

    </system.webServer>

</configuration>

 

Hope this helps!