Click here to Skip to main content
15,307,716 members
Please Sign up or sign in to vote.
4.50/5 (2 votes)
See more: , +
I have built an ASP.NET web application (that houses a Silverlight 4 app) and it utilizes a couple of COM dlls. The dlls are registered (verified by finding the CLSIDs in the registry, and seeing the classes within the CLSIDs), and they are located in a directory that has full control for all users.

When I run the VS debug using the localhost method, everything runs fine, but when I change it to use IIS hosting, it throws the error:

Retrieving the COM class factory for component with CLSID {006CA725-8B67-11D4-A067-FFF276E93345} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

I am using Win7 64-bit, and I have enabled the appilcation pool for the site in IIS to allow 32-bit applications.

Not sure what else to try. The dlls are provided to us by a 3rd party manufacturer to calculate their product performance (which we need to help calculate our product performance), so I am unable to rebuild them in .NET (and the manufacturer is not changing them since they would then have to go through the re-certification process).


This discussion talks about a possible work around for the error:[^]

BTW there are many other discussions here[^] :thumbsup:
The solution was a stupid oversight on my part. Since I am still learing IIS, i set the application pool to have the correct settings, but I forgot to set the site to use the application pool.

The application pool had to be set to allow 32-bit applications, which it was, but was not being used by the site.

So far this seems to have done the trick.

Thanks for the help,
I found this on the first page of over 2.1 million results with a google search for " class not registered":[^]
My problem and the solution

I have a 32 bit third party dll which i have installed in 2008 R2 machine which is 64 bit.

I have a wcf service created in .net 4.5 framework which calls the 32 bit third party dll for process. Now i have build property set to target 'any' cpu and deployed it to the 64 bit machine.

when i tried to invoke the wcf service got error "80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"

Now i used ProcMon.exe to trace the com registry issue and identified that the process is looking for the registry entry at HKLM\CLSID and HKCR\CLSID where there is no entry.

Came to know that Microsoft will not register the 32 bit com components to the paths HKLM\CLSID, HKCR\CLSID in 64 bit machine rather it places the entry in HKLM\Wow6432Node\CLSID and HKCR\Wow6432Node\CLSID paths.

Now the conflict is 64 bit process trying to invoke 32 bit process in 64 bit machine which will look for the registry entry in HKLM\CLSID, HKCR\CLSID. The solution is we have to force the 64 bit process to look at the registry entry at HKLM\Wow6432Node\CLSID and HKCR\Wow6432Node\CLSID.

This can be achieved by configuring the wcf service project properties to target to 'X86' machine instead of 'Any'.

After deploying the 'X86' version to the 2008 R2 server got the issue "System.BadImageFormatException: Could not load file or assembly"

Solution to this badimageformatexception is setting the 'Enable32bitApplications' to 'True' in IIS Apppool properties for the right apppool.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900