Installing Classic ASP COM Components

1977 comments

Some tips on installing classic ASP COM objects under IIS7 on Windows 2008 64-bit.

 

App Pool

It is important to set up the site with the right app pool settings. These are good settings to use:

1. Enable 32 Bit Components on Win64 = TRUE (essential if using 32 bit COM objects or Access/ODBC data sources)

2. Identity = LocalSystem (essential for SA-FileUp to work properly - but can use App Pool Identity instead for most components eg abcPDF)

3. Pipeline mode = Classic (may be essential with some components)

4. Managed code = None (not required)

5. Load User Profile = true (required for some components eg abcPDF)


Component Services


For components which need packaging (eg abcpdf)


Create a new COM+ Application (we called ours Beweb) then you will be able to add
components to it.


Select the option to create an empty application, then select "Server Application" rather than "Library Application". Choose to run as Local System Service.


For roles, keep Creator Owner. Add additional users under this role, for example Users or Everyone so that the permissions enable the COM to run.


Go to properties of the new application (beweb), click Security tab and uncheck "Enforce access checks for this application". Otherwise many COMs will not work.


When installing components you can either choose to add new or existing components. If they do not show up under existing (when selecting 32 bit components) then you will know you need to click "add new" instead and browse to the DLL file. AbcPDF should be under existing.


Tick 32bit registry to see the 32bit DLLs, tick the Details to see the path of the DLL (make sure it is the right one). Select the DLL you want to install and click next.


admin\includes\compcheck.asp should now show the component as installed. Check this.


You may need to go into "advanced" tab under each component and check "Enable IIS
properties".


 

Mixing ASP.NET MVC and Classic ASP

Sometimes you want to be running both ASP.NET MVC and classic ASP with file upload or other 32-bit COM components. Most classic ASP stuff works OK under any app pool but for any COM components, there could be issues. To avoid any such issues this you must set up two applications each with their own app pool:

1. .net app pool should have .NET 4 + Integrated Pipeline - usually this is the site root itself to enable routing from the root level

2. classic ASP app pool should have Enable 32 Bit + LocalSystem + Classic Pipeline (see settings above) - this must be a subfolder set to be an application (click "convert to application")

 

If the only uploads are in the admin folder, you can just make the admin folder be its own application. This would have the classic app pool that you set up. The .NET application can then have the root. 

 

You can swap it round the other way if you don't mind .NET having routing start from a subfolder path. You can also use Virtual Directories so that paths can be referenced from .NET to ASP or vice versa without being actually under each other.

 

Security Permissions

Under IIS7 and IIS7.5 the 32bit mode runs under the "IUSR" identity, no matter what you choose under App Pool Identity. (This is not IUSR_machinename, just IUSR.)

 

You can use SysInternals Process Monitor to debugging what permissions are being rejected. Full description is here:

http://learn.iis.net/page.aspx/563/using-classic-asp-with-microsoft-access-databases-on-iis/

 (filter by Result = "ACCESS DENIED")

 

Also check the user being impersonated - in this case the user is IIS AppPool/Smartpark it is impersonating IUSR, so it is actually IUSR that needs the modify permissions:

 

Make sure to 'Load User Profile' in the app pool advanced settings.

 

Component Services

You need to go into "component services" (under administrative tools) and create a component package to host the COM object.

See PDF

 

Specific Component requirements under Win64

 

CxImage

There is now an installer available which makes this just work without any mucking round.

http://cximageatl.codeplex.com/

 

AspImage

Put the DLL in C:\Windows\SysWOW64

Run regsvr32 on it (command prompt and cd to C:\Windows\SysWOW64)

Create a COM+ application package for it in Component Services, run as Local System Service

Go to properties of the new application, click Security tab and uncheck "Enforce access checks for this application"

Register the licence key using USERREG.EXE found in userrg2 folder in the installation files

 

JMail

Install using the installer

Copy Jmail.DLL from "C:\Program Files (x86)\Dimac Development\JMail" into "C:\Windows\SysWOW64"

Run regsvr32 on it (command prompt and cd to C:\Windows\SysWOW64)


You may get the following error:

ActiveX component can't create object

If so, install it under Component Services as a package (see PDF for instructions).


 

ABCpdf

Install the 32 bit version using the installer (may be a separate download, but it will automatically pick up the same licence key if you already installed and registered the 64 bit version)


Add all ABCpdf related objects to Component Services (look in 32 bit registry)


Run SysInternals Process Monitor (filter by Result = "ACCESS DENIED")

If any access denied, right-click Jump To and grant access to everyone on required registry key

 

ADODB JET Access Database Driver

If you get the error "Provider cannot be found. It may not be properly installed" you just need to tick the app pool setting "Enable 32 Bit Components on Win64".

 

if you get this error "

Microsoft JET Database Engine error '80040e09'

Cannot update. Database or object is read-only.

/admin/login-submit.asp, line 102"

 

You need to add modify permission for IUSR on the database folder.

 


INSTALLING CLASSIC ASP COMPONENTS


All the various components have different ways of configuring. Here are the ones we use and
how to configure them.
• SA-FileUp
Do NOT use the component services. Just install it using the setup program. SA-FileUp 328e
in installers says it is an eval version but it actually never expires, so it is a good one to use.
We use this on most servers.
• Jmail 4 Pro
Install using the jmail setup program. Go into component services and add existing 32 bit
component to your package (or create a new empty COM+ package - see configuration
below).
• CxImage
Copy the DLL into Windows \SysWOW64 (or Windows\System32 if running 32 bit OS). Go
into component services and add a "new" component to your package (or create a new
empty COM+ package - see configuration below). Browse to the DLL and this will register it.
• AbcPDF
Install using the abcPDF setup program. Go into component services and add existing 32 bit component to your package (or create a new empty COM+ package - see configuration below).
• Dundas Upload
This is now a free component released as public domain. We have not used it much but
there is full support for it in beweb CMA. I do not know what its installation requirements
are.
• Persits aspUpload
do not need to use component services. Just install using setup program.
• Abcpdf
Note you must use the 32 bit version if you have a 32 bit app pool (which you may need for other 32 bit coms).


Testing
http://site.co.nz/admin/includes/compcheck.asp
http://site.beweb.co.nz/admin/includes/compcheckmail.asp
See also
http://www.chestysoft.com/component-services.asp


Possible Error Messages


ABCpdf error '80131500'

Exception was thrown in another thread.


To solve this error, you need to package abcPDF into a COM+ Application using Component Services.


Server object error 'ASP 0178 : 80070005'

Server.CreateObject Access Error

The call to Server.CreateObject failed while checking permissions. Access is denied to this object.


This can be an error with abcPDF. If you look in Event Viewer > Windows Logs > System you might see the following:


The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID 

To fix, delete the COM+ application and create it again with appropriate users eg Users under the Creator Owner roles.


ActiveX component can't create object
Microsoft VBScript runtime error '800a01ad
ActiveX component can't create object
/admin/includes/beweb-cma.asp, line 1731


If you get the error above, first check if you have accidentally set up SA-FileUp under component services. It does not work this way - it needs to run directly under the app pool (which should be running as LocalSystem). You just need to delete from your package. 


If that is not the problem, check the Event Log (event viewer, Windows Logs > System). I believe the error means that a component was created by ASP script OK, but then it tried to create a subcomponent and that failed. This is most likely due to a permissions issue which means that the component is not running as the correct user identity. Go to the line number in beweb-cma to see which which component it relates to. The user identity will be either set in the App Pool or if it is running as a package in component services then it will be set under the package properties. Look at changing whether it needs to be component services, changing the user identity, or changing permissions on files it is likely to want to use or create. Alternatively it could be some other type of
error that causes a component creation to fail.


If in doubt, check the Event Log for COM or DistributedCOM failures (event viewer, Windows Logs > System).


For applications that cannot be installed as a new component (eg aspimage or cximage)
In some cases you might need to do one or both of these steps. Normally only if you get the error below.
1. Copy the DLL to the Windows\SysWOW64 directory
2. In command prompt run regsvr32 name.dll
3. In Component Services instead of installing a new component use the import components that are already registered.

 


Comments


Leave a Comment