Greetings,
I have a VB.NET application that references a 3rd party Com component. The file is Interop.WINTSRRLIB.dll. My VB.NET application has a project reference to the COM comonent which lives in the directory: C:\WaveTracker.
The application runs fine. When I sent it to my customer, he installed in on his desktop machine. It runs fine. Then he copied all of the application files (which live in C:\WaveTracker) to his laptop. However, on his laptop, he gets the error:
"System.Runtime.InteropServices.COMException (0x80040154). Retrieving the COM class factory for component xxxx failed due to the following error: 80040154"
The customer swears he has the .NET 2.0 Framework installed properly on his laptop. Any ideas on how I can get over this problem???
Kind Regards,
Scott
|
| Scott Masters Tuesday, September 26, 2006 10:44 PM |
Make sure you look in the registry of a PC on which your app works. Don't do a search, just look through the keys in HKCR\CLSID for the GUID, they are sorted alphabetically. The fact that you can't find a DLL that can be registered with regsvr32 is a strange problem. If might live in another folder, c:\windows\system32 perhaps. Look at the properties of the WinTSRRapiLib reference in your project. Also, the component may itself use another ActiveX component that requires registration. Like the VB6 runtime files for example.
Another way to debug this problem is to use the RegMon utility, available for free at www.sysinternals.com. It shows you how your app uses the registry. Run it on yours and run it on the customer's and compare the two.
|
| nobugz Friday, September 29, 2006 12:55 AM |
i went to www.sysinternals.com and downloaded a few utilities that led me to the problem...'listdlls' and 'procexp' were very useful. The problem was simply that the 3rd party dll required other dlls that were not on the system. So I installed the required (other) dlls and everything is fine.
Thanks for your help and recommendations.
Scott |
| Scott Masters Friday, September 29, 2006 2:51 AM |
The COM component needs to be registered on his laptop. Start + Run, regsvr32 c:\wavetracker\componentname.dll
|
| nobugz Tuesday, September 26, 2006 10:49 PM |
I had my customer try this (register thedll with regsrvr32) and he reports to me that the system responds with a message that says that the file was loaded but the entry point could not be found and therefore was not registered. The application still aborts with the same 80040154 error.
I can find no evidence that I had registered the dll on my system (with regsrvr32), nor does my customer remember registering it on his desktop system (where the application works and accesses the dll correctly).
So, I guess I am somewhat flummoxed here...any further advice?
Tx,
Scott |
| Scott Masters Wednesday, September 27, 2006 3:53 PM |
Sounds
like he was trying to register the wrong DLL. If it is a COM
component, it should allow itself to be registered. To find out
what DLL you really need to be registered, pay attention to the GUID
reported in the error message. It will look something like
"{750fdf0e-2a26-11d1-a3ea-080036587f03}". Start Regedit.exe on
your PC and navigate to HKCR\CLSID. Find the GUID that was
reported in the error message. Open the key and look for the
value of 'InProcServer32', it should point to the DLL.
|
| nobugz Wednesday, September 27, 2006 4:07 PM |
The GUID reported in the 80040154 message does not show in in a registry search. When attempting to register the dll, the error message is that the DLLRegistryServer entry point cannot be found.
The customer allowed me to access the problem system remotely...there is only one copy of the dll "interop.wintssrapilib.dll" on his system and it is the correct version. In fact, I transferred all of the application files from my system directly to his sytsem and the error persists.
Also, I have a few small dLLs in the application that I wrote....I have never had to 'register' them to have the application work. Furthermore, when I do attempt to register them (just to shed some light on this problem), I (again) get the error that the DllRegister Server entry point cannot be found.
I think this may be an instance of the dll-hell I have always heard about. Any clue as to what is happening?
Tx
Scott
|
| Scott Masters Thursday, September 28, 2006 10:22 PM |
Make sure you look in the registry of a PC on which your app works. Don't do a search, just look through the keys in HKCR\CLSID for the GUID, they are sorted alphabetically. The fact that you can't find a DLL that can be registered with regsvr32 is a strange problem. If might live in another folder, c:\windows\system32 perhaps. Look at the properties of the WinTSRRapiLib reference in your project. Also, the component may itself use another ActiveX component that requires registration. Like the VB6 runtime files for example.
Another way to debug this problem is to use the RegMon utility, available for free at www.sysinternals.com. It shows you how your app uses the registry. Run it on yours and run it on the customer's and compare the two.
|
| nobugz Friday, September 29, 2006 12:55 AM |
i went to www.sysinternals.com and downloaded a few utilities that led me to the problem...'listdlls' and 'procexp' were very useful. The problem was simply that the 3rd party dll required other dlls that were not on the system. So I installed the required (other) dlls and everything is fine.
Thanks for your help and recommendations.
Scott |
| Scott Masters Friday, September 29, 2006 2:51 AM |
Hi Scott, could you please tell me which utilities you downloaded from www.sysinternals.com, how can i find them at this page?
I have the save trouble with a web service
Thanks for your help |
| PabloDFT Wednesday, November 01, 2006 4:44 PM |
You need to register the com class on the web server too. Run .reg and .bat of your DLL on the web server.
|
| tngm Wednesday, May 21, 2008 9:43 PM |
Hello Friend,
the file you reffered to register"interop.wintssrapilib.dll" is only the wrapper fro your original file. You can't register this wrapper file with regsvr32.exe. You need the original component file "wintssrapilib.dll".
So you copy the file"wintssrapilib.dll" to C:\WaveTracker and issue the command "regsvr32 C:\WaveTracker\wintssrapilib.dll".
I hopeyour problem solved..
Senthil Kumar D, sd_senthilkumar@hotmail.com
|
| IntelligenceIndia Monday, September 01, 2008 5:16 AM |
it looks like you deinstalled some component and it unregisted your dll. Simply reinstall it or fire regsvr32 |
| LightGuy Tuesday, September 16, 2008 1:31 PM |
I'm running a 32-bit custom app on 64-bit windows xp sp2. It starts fine, but when it tries to connect to another app (also 32-bit) I get the problem referenced here (80040154 retreiving COM Class factory). So, I went to the GUID directory for for 32-bit procs in a 64-bit architecture (HKCR\Wow6432Node\CLSID) and found the GUID referenced in the error msg. Looked at the proc and then regsitered it with regsrv32. Registration went successfully.
However, I still get the same error when running the program and trying to connect. Any addt'l thoughts on this?
- Edited bymsp115 Friday, November 14, 2008 12:43 AM
-
|
| msp115 Friday, November 14, 2008 12:41 AM |
It sounds like your app is running in 64-bit mode. That would be automatic if it is a .NET app. Use Corflags.exe or Build + Platform Target to force it to run in 32-bit mode. Hans Passant. |
| nobugz Friday, November 14, 2008 1:00 AM |
Corflags worked like a charm. .NET was indeed trying to force it to run as a64bit app. Running corflags with the /32bit+ switch modified the .exe properties and allowed for the app to start and connect without incident. Thanks so much - appreciate your quick (and accurate) response!
Mike - Edited bymsp115 Monday, November 17, 2008 7:41 PM
-
|
| msp115 Monday, November 17, 2008 4:09 PM |
Please register the dll's and restart IIS to fix the Issue. |
| RajivYK Tuesday, April 14, 2009 12:01 PM |
80040154
- Proposed As Answer bymessengr Saturday, September 26, 2009 11:33 AM
-
|
| messengr Saturday, September 26, 2009 11:33 AM |
If you're getting the error within a website I managed to fix this errorby going into IIS and going into the Advanced Settings of the Application Pool the website is using. There is an option to "Enable 32-bit Applications" which will probably be set to False. Set it to True and restart the website. |
| FortyEightK 21 hours 35 minutes ago |