Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Install package fails - DLL fails to register

1 view
Skip to first unread message

Chris Jones

unread,
Mar 24, 2003, 9:52:08 AM3/24/03
to microsoft.public.platformsdk.msi
I have developed an add-in DLL for MS Office. This works fine on my
development PC, and I create the install package fine as well. However, when
I go to test the install package on a clean PC, I get the following error
being reported:-
"Error 1904: Module *.dll failed to register. HRESULT -2147024770".

When I run the Office application and attempt to manually install the
add-in, I get a message saying that the add-in is not a recognised Office
add-in.

Can anyone here tell me where I may be going wrong?

The development language is VC++ v6.

--
Chris Jones
reply to: chris...@xxxtelespanxxx.co.uk
(remove the x's to reach me)


Andrei Zakharov

unread,
Mar 24, 2003, 10:16:51 AM3/24/03
to
"This works fine on my development PC ..." and "When I run the Office
application and attempt to manually install ..." -- is it on the same box or
not?
Anyway, at first try to run depends.exe from PSDK to look at what dlls your
stuff is dependent from.

Andrei.

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message
news:TLSPCE...@telespan.co.uk...

Chris Jones

unread,
Mar 24, 2003, 11:26:31 AM3/24/03
to microsoft.public.platformsdk.msi

My responses are shown inline below:-

--
Chris Jones
reply to: chris...@xxxtelespanxxx.co.uk
(remove the x's to reach me)
"Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message
news:#vGgEgh8...@TK2MSFTNGP12.phx.gbl...

> "This works fine on my development PC ..." and "When I run the Office
> application and attempt to manually install ..." -- is it on the same box
or
> not?
No. The test platform is on a spare Win2k PC that I happen to have. I wanted
to ensure that the install would _not_ be polluted by the environment on my
development environment.

> Anyway, at first try to run depends.exe from PSDK to look at what dlls
your
> stuff is dependent from.

The only dependancies are the standard MFC42.dll, MSVCRT.dll and
wsock32.dll. The first two are included in my install package and the third,
being protected, is excluded.

Phil Wilson

unread,
Mar 24, 2003, 1:34:33 PM3/24/03
to
mfc42.dll and msvcrt.dll are also protected files on Windows 2000, so you shouldn't be attempting to
install them either. I'm wondering if your DLL requires a later version of mfc42.dll and therefore
requires some minimum SP level of Windows 2000. Note that running the dependency walker on your
development system won't show if your DLL is linking to missing entrypoints in mfc42.dll because
you've got the right version on your development machine.

(Obligatory Advice: Populate the class tables, progid tables etc.)

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message news:TLSPCE...@telespan.co.uk...

Chris Jones

unread,
Mar 24, 2003, 2:31:16 PM3/24/03
to microsoft.public.platformsdk.msi

--
Chris Jones
reply to: chris...@xxxtelespanxxx.co.uk
(remove the x's to reach me)

"Phil Wilson" <phil....@unisys.spamcom> wrote in message
news:OsysEQj8...@TK2MSFTNGP11.phx.gbl...


> mfc42.dll and msvcrt.dll are also protected files on Windows 2000, so you
shouldn't be attempting to
> install them either.

AIUI, from looking at Microsoft's site, that is not actually true. MFC42 and
MSVCRT are both distributable (provided that I have the Professional version
of C++ - which I do). According to the help page in VStudio, the Debug
versions are _not_ re-distributable - which is probably what you were
referring to.

> I'm wondering if your DLL requires a later version of mfc42.dll and
therefore
> requires some minimum SP level of Windows 2000. Note that running the
dependency walker on your
> development system won't show if your DLL is linking to missing
entrypoints in mfc42.dll because
> you've got the right version on your development machine.

The version numbers of each of the above dll's has _not_ changed since late
1999

>
> (Obligatory Advice: Populate the class tables, progid tables etc.)
>

I have been using VS Installer to generate the msi file. Neither of the
above appear to be populated (looking in Orca). How do I achieve that
without having to buy someone else's expensive installer package?

Is there a HOWTO document somewhere on the web that explains (in basic
language) how to do that?

Phil Wilson

unread,
Mar 24, 2003, 3:55:03 PM3/24/03
to
No I am not referring to the debug versions. You seem to be under the impression that if a file is
marked as redistributable you can install it anywhere you like, but that is not the case. mfc42.dll
and msvcrt.dll are protected files on Windows 2000. A whole bunch of files are marked
redistributable because you really do need to redistribute them on some OSs (like NT 4, for example,
for the mfc dlls).

Run this program if you want to see the whole list on Windows 2000.

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <sfc.h>
PROTECTED_FILE_DATA aFile = {0};
FILE *stream;
int main(int argc, char* argv[])
{
BOOL res = true;
long i=0;
stream = fopen( "sfcfiles.txt", "w" );
while (res)
{
res = SfcGetNextProtectedFile (NULL, &aFile) ;
if (res)
fprintf(stream, "%S\n", aFile.FileName);
}
fclose (stream);
return 0;
}

Got to http://www.installsite.org for tools and examples. Depending on what tool you're using, it
may have an option to extract it all for you. Visual Studio.NET will, so will InstallShield
Developer. In VS.NET's installer, go to the properties and set vsdrfCOM on the Dll, do a build and
it extracts it all.


"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message news:TLSPCE...@telespan.co.uk...
>
>

Chris Jones

unread,
Mar 25, 2003, 5:50:29 AM3/25/03
to microsoft.public.platformsdk.msi

"Phil Wilson" <phil....@unisys.spamcom> wrote in message

news:#65elek8...@TK2MSFTNGP12.phx.gbl...


> No I am not referring to the debug versions. You seem to be under the
impression that if a file is
> marked as redistributable you can install it anywhere you like, but that
is not the case. mfc42.dll
> and msvcrt.dll are protected files on Windows 2000. A whole bunch of files
are marked
> redistributable because you really do need to redistribute them on some
OSs (like NT 4, for example,
> for the mfc dlls).

My version of Visual Studio (not .NET, unfortunately) makes no mention of
the issue of protected files.

<snipped code>


> Got to http://www.installsite.org for tools and examples. Depending on
what tool you're using, it
> may have an option to extract it all for you. Visual Studio.NET will, so
will InstallShield
> Developer. In VS.NET's installer, go to the properties and set vsdrfCOM
on the Dll, do a build and
> it extracts it all.

As mentioned above, I do not have VS.NET, so this is not possible.

> > >
> > > (Obligatory Advice: Populate the class tables, progid tables etc.)
> > >
> > I have been using VS Installer to generate the msi file. Neither of the
> > above appear to be populated (looking in Orca). How do I achieve that
> > without having to buy someone else's expensive installer package?

??

> >
> > Is there a HOWTO document somewhere on the web that explains (in basic
> > language) how to do that?

??

Andrei Zakharov

unread,
Mar 25, 2003, 6:49:56 AM3/25/03
to
Why not install mfc42.dll and msvcrt.dll into the same folder
where your dll is? Also it's required that mfc42.dll to be registered in the
registry.

Andrei.

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message
news:TLSPCE...@telespan.co.uk...
>
>

Chris Jones

unread,
Mar 25, 2003, 8:54:23 AM3/25/03
to microsoft.public.platformsdk.msi
Andrei,

"Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message

news:Ob8RCRs8...@TK2MSFTNGP10.phx.gbl...


> Why not install mfc42.dll and msvcrt.dll into the same folder
> where your dll is? Also it's required that mfc42.dll to be registered in
the
> registry.
>

Thanks for your response. My problem does not, I believe, have anything to
do with the re-distributable dll's, but lies in the fact that my own dll
does _not_ register, as I asked first of all. I have used the depends.exe to
look at dependancies and it comes up with two "warnings":-
APPHELP.DLL - cannot find this file. I have seen questions about this file
recently - is it something to do with the latest version of IE6?
MPR.DLL - At least one module has an unresolved import due to a missing
export function in a delay-load dependent module. The function that reports
the above error is WNetRestoreConnection.

What is the explanation of these errors? and how do I overcome them?

I wonder if anyone can also answer my two previous requests for information
in this thread:-


>
> (Obligatory Advice: Populate the class tables, progid tables etc.)
>
I have been using VS Installer to generate the msi file. Neither of the
above appear to be populated (looking in Orca). How do I achieve that
without having to buy someone else's expensive installer package?

Is there a HOWTO document somewhere on the web that explains (in basic


language) how to do that?

--

Jeff Briggs

unread,
Mar 25, 2003, 10:09:39 AM3/25/03
to
For the MPR.dll issue you are having - this is known to happen if you are
statically linking to MFC using Visual Studio .NET 2002 (current release).
You can at least fix this error by statically linking to MFC.

Hope this helps with at least one of your errors.

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in

news:TLSPCE...@telespan.co.uk:

Jeff Briggs

unread,
Mar 25, 2003, 10:15:59 AM3/25/03
to
Please disregard last post - what I meant to say was ...

For the MPR.dll issue you are having - this is known to happen if you
are statically linking to MFC using Visual Studio .NET 2002 (current

release). You can at least fix this error by dynamically linking to MFC.


Jeff Briggs <jbr...@GET.RID.OF.THIS.futuredesigntech.com> wrote in
news:Xns934948D89EACDjb...@207.46.248.16:

Chris Jones

unread,
Mar 25, 2003, 10:46:20 AM3/25/03
to microsoft.public.platformsdk.msi

--
Chris Jones
reply to: chris...@xxxtelespanxxx.co.uk
(remove the x's to reach me)

message news:Xns934949EB522A2jb...@207.46.248.16...


> Please disregard last post - what I meant to say was ...
>
> For the MPR.dll issue you are having - this is known to happen if you
> are statically linking to MFC using Visual Studio .NET 2002 (current
> release). You can at least fix this error by dynamically linking to MFC.
>

I am dynamically linking using Visual Studio 6, not .NET. So how can this be
the problem?

Andrei Zakharov

unread,
Mar 25, 2003, 11:37:10 AM3/25/03
to
Don't bother with those dlls, it's legal situation, because they're delayed
load dlls, e.g. APPHELP.DLL is actual for XP only.
BTW, what is the process of registering by itself? regsvr32? Can you attach
a debugger to a process on remote machine?

Andrei.

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message
news:TLSPCE...@telespan.co.uk...

Andrei Zakharov

unread,
Mar 25, 2003, 11:42:48 AM3/25/03
to
What you have actaully to do is to get into the code on the box it doesn't
work: at least try to put message boxes, etc. I had several situation that
was caused by lacks in my code, e.g. absence of type library for my COM
component when _AtlModule.DllRegisterServer was called, etc.

Andrei.

"Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message news:...

Chris Jones

unread,
Mar 25, 2003, 12:17:30 PM3/25/03
to microsoft.public.platformsdk.msi

"Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message

news:eKhA00u8...@TK2MSFTNGP11.phx.gbl...


> What you have actaully to do is to get into the code on the box it doesn't
> work: at least try to put message boxes, etc. I had several situation that
> was caused by lacks in my code, e.g. absence of type library for my COM
> component when _AtlModule.DllRegisterServer was called, etc.
>

How do I get message boxes into an MSI package?

> "Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message news:...
> > Don't bother with those dlls, it's legal situation, because they're
> delayed
> > load dlls, e.g. APPHELP.DLL is actual for XP only.
> > BTW, what is the process of registering by itself? regsvr32? Can you
> attach
> > a debugger to a process on remote machine?

If I attempt to register using regsvr32, I get a similar failure to register
with "Load Library ("DLL Name") failed. The specified module could not be
found" in a message box.

How would I attach a debugger to the installer?

Andrei Zakharov

unread,
Mar 26, 2003, 2:55:43 AM3/26/03
to
Chris,

1) Can you successfully run regsvr32 on your development box? If yes, then
just put regsvr32 into Debugging->Command property of your project (if it's
VC++ 7 if I remember) to get into DllRegisterServer.

2) If you run regsvr32 on the other box try to attach your VS debugger to
running regsvr32 on the other box, read your doc for details. The only
moment in this case is to put MessageBox into DllRegisterServer to stick
regsvr32.

3) I meant to put MessageBoxes into DllRegisterServer to look does it come
to this point. If so, the problem isn't in dll dependencies.

Andrei.

"Chris Jones" <ch...@xxxtelespanxxx.co.uk> wrote in message
news:TLSPCE...@telespan.co.uk...
>
>

Chris Jones

unread,
Mar 26, 2003, 5:03:26 AM3/26/03
to microsoft.public.platformsdk.msi
Andrei,
Thanks for the reply...

"Andrei Zakharov" <z_an...@NO-SPAMimail.ru> wrote in message

news:#Af2zy28...@TK2MSFTNGP11.phx.gbl...


> Chris,
>
> 1) Can you successfully run regsvr32 on your development box? If yes, then
> just put regsvr32 into Debugging->Command property of your project (if
it's
> VC++ 7 if I remember) to get into DllRegisterServer.

I am actually using VC++ 6. Is this route still possible?

>
> 2) If you run regsvr32 on the other box try to attach your VS debugger to
> running regsvr32 on the other box, read your doc for details. The only
> moment in this case is to put MessageBox into DllRegisterServer to stick
> regsvr32.

Can you tell me how I can attach the VS debugger to the other PC? I did not
think that was possible and cannot immediately find anything about this in
Microsoft's VS documentation.

>
> 3) I meant to put MessageBoxes into DllRegisterServer to look does it come
> to this point. If so, the problem isn't in dll dependencies.

I presume that you mean the function in my main program module called
DllRegisterServer.

Andrei Zakharov

unread,
Mar 26, 2003, 6:51:37 AM3/26/03
to
> > 1) Can you successfully run regsvr32 on your development box? If yes,
then
> > just put regsvr32 into Debugging->Command property of your project (if
> it's
> > VC++ 7 if I remember) to get into DllRegisterServer.
> I am actually using VC++ 6. Is this route still possible?

Of course, Project Settings->Debug->Executable for debug session.


> > 2) If you run regsvr32 on the other box try to attach your VS debugger
to
> > running regsvr32 on the other box, read your doc for details. The only
> > moment in this case is to put MessageBox into DllRegisterServer to stick
> > regsvr32.
> Can you tell me how I can attach the VS debugger to the other PC? I did
not
> think that was possible and cannot immediately find anything about this in
> Microsoft's VS documentation.

Debugging Remote Applications
http://msdn.microsoft.com/library/en-us/vccore98/html/_core_debugging_remote
_applications.asp

Also, you can find useful to look at:
Can I Debug a .DLL Without a Project or Workspace?
http://msdn.microsoft.com/library/en-us/vccore98/html/_core_can_i_debug_a_..
dll_without_a_project_or_workspace.3f.asp

How Can I Debug Access Violations When Running My Program Standalone?
http://msdn.microsoft.com/library/en-us/vccore98/html/_core_how_can_i_debug_
access_violations_when_running_my_program_standalone.3f.asp

the last topic can be used if you put
__asm int3;
line in your code allowing to get into debugger every time it's reached.

Andrei.


0 new messages