activex registration misses CLSID for some users

R

Robm

Here's a crazy problem that I woukd appreciate help with. I use Visual
Studio Installer to create an msi file. Two of the components to be
installed are mfc based activex controls generated using Visual Studio C++ 6
Activex Controlwizard. They were both created in the same way, using the
wizard. Both of them have the same DllRegisterServer and DllUnRegisterServer
functions. When the msi file is run, both controls register properly for the
user that ran the msi, but for another user, only one of the two registers
properly.

Before the install I make sure that there are no entries for either control
in HKEY_CLASSES_ROOT for either user. After the installation, for the first
user there is an entry for each control, including the proper CLSID and a
value Insertable.For the second user, one of the controls has the entry as
well, including the Insertable value, but without a CLSID value, while the
other correctly has the CLSID.

How can this be? Any and all help is appreciated!

Rob
 
P

Phil Wilson

This might be something to do with it being a per-user install instead of a
per-system. If each user logs on and looks in HKCU\Software\Classes\CLSID
does everything show up properly?
 
R

Robm

No, for one of the two controls it only looks OK for the user who actually
ran the msi.

I have found that the only way to get around this is to use self regitration
for the controls. That is against the rules, but it's much better than
asking users to manually register the contriols.

Rob M

Phil Wilson said:
This might be something to do with it being a per-user install instead of a
per-system. If each user logs on and looks in HKCU\Software\Classes\CLSID
does everything show up properly?
--
Phil Wilson [MVP Windows Installer]
----
Robm said:
Here's a crazy problem that I woukd appreciate help with. I use Visual
Studio Installer to create an msi file. Two of the components to be
installed are mfc based activex controls generated using Visual Studio
C++
6
Activex Controlwizard. They were both created in the same way, using the
wizard. Both of them have the same DllRegisterServer and DllUnRegisterServer
functions. When the msi file is run, both controls register properly for the
user that ran the msi, but for another user, only one of the two registers
properly.

Before the install I make sure that there are no entries for either control
in HKEY_CLASSES_ROOT for either user. After the installation, for the first
user there is an entry for each control, including the proper CLSID and a
value Insertable.For the second user, one of the controls has the entry as
well, including the Insertable value, but without a CLSID value, while the
other correctly has the CLSID.

How can this be? Any and all help is appreciated!

Rob
 
S

Simon Giesemann

Are you looking at the Current User reg keys or the Local Machine, you have
not specified in your question.

Check the ALLUSERS property within your MSI, you might want to set it to 1
to force a per-machine install.

Robm said:
No, for one of the two controls it only looks OK for the user who actually
ran the msi.

I have found that the only way to get around this is to use self regitration
for the controls. That is against the rules, but it's much better than
asking users to manually register the contriols.

Rob M

Phil Wilson said:
This might be something to do with it being a per-user install instead
of
a
per-system. If each user logs on and looks in HKCU\Software\Classes\CLSID
does everything show up properly?
--
Phil Wilson [MVP Windows Installer]
----
Robm said:
Here's a crazy problem that I woukd appreciate help with. I use Visual
Studio Installer to create an msi file. Two of the components to be
installed are mfc based activex controls generated using Visual Studio
C++
6
Activex Controlwizard. They were both created in the same way, using the
wizard. Both of them have the same DllRegisterServer and DllUnRegisterServer
functions. When the msi file is run, both controls register properly
for
the
user that ran the msi, but for another user, only one of the two registers
properly.

Before the install I make sure that there are no entries for either control
in HKEY_CLASSES_ROOT for either user. After the installation, for the first
user there is an entry for each control, including the proper CLSID
and
entry
 
R

Robm

I am using Visual Studio Installer, and it doesn't have an ALLUSERS
property. Registering the controls is not a matter of HKCU or HKLM, they
have to end up correctly in HKCR.
 
P

Phil Wilson

That's your problem, as I was trying to say earlier. Registration of COM
classes from MSI tables depends on whether the install is per-user or
per-machine. It looks like VS Installer doesn't give you the choice which
would cause ALLUSERS to be 1 for a per-machine install. It *is* a matter of
HKCU or HKLM: a per-user install doesn't register a COM class for the whole
system, just for the installing user into HKCU.
--
Phil Wilson [MVP Windows Installer]
----
Robm said:
I am using Visual Studio Installer, and it doesn't have an ALLUSERS
property. Registering the controls is not a matter of HKCU or HKLM, they
have to end up correctly in HKCR.

Simon Giesemann said:
Are you looking at the Current User reg keys or the Local Machine, you have
not specified in your question.

Check the ALLUSERS property within your MSI, you might want to set it to 1
to force a per-machine install.

Robm said:
No, for one of the two controls it only looks OK for the user who actually
ran the msi.

I have found that the only way to get around this is to use self regitration
for the controls. That is against the rules, but it's much better than
asking users to manually register the contriols.

Rob M

This might be something to do with it being a per-user install
instead
of
a
per-system. If each user logs on and looks in HKCU\Software\Classes\CLSID
does everything show up properly?
--
Phil Wilson [MVP Windows Installer]
----
Here's a crazy problem that I woukd appreciate help with. I use Visual
Studio Installer to create an msi file. Two of the components to be
installed are mfc based activex controls generated using Visual Studio
C++
6
Activex Controlwizard. They were both created in the same way,
using
the
wizard. Both of them have the same DllRegisterServer and
DllUnRegisterServer
functions. When the msi file is run, both controls register
properly
for
the
user that ran the msi, but for another user, only one of the two
registers
properly.

Before the install I make sure that there are no entries for either
control
in HKEY_CLASSES_ROOT for either user. After the installation, for the
first
user there is an entry for each control, including the proper
CLSID
and
a
value Insertable.For the second user, one of the controls has the entry
as
well, including the Insertable value, but without a CLSID value, while
the
other correctly has the CLSID.

How can this be? Any and all help is appreciated!

Rob
 
S

SimonX

Hi,

This link might help you get to the bottom of your problem
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/bas
e/hkey_classes_root_key.asp


Robm said:
I am using Visual Studio Installer, and it doesn't have an ALLUSERS
property. Registering the controls is not a matter of HKCU or HKLM, they
have to end up correctly in HKCR.

Simon Giesemann said:
Are you looking at the Current User reg keys or the Local Machine, you have
not specified in your question.

Check the ALLUSERS property within your MSI, you might want to set it to 1
to force a per-machine install.

Robm said:
No, for one of the two controls it only looks OK for the user who actually
ran the msi.

I have found that the only way to get around this is to use self regitration
for the controls. That is against the rules, but it's much better than
asking users to manually register the contriols.

Rob M

This might be something to do with it being a per-user install
instead
of
a
per-system. If each user logs on and looks in HKCU\Software\Classes\CLSID
does everything show up properly?
--
Phil Wilson [MVP Windows Installer]
----
Here's a crazy problem that I woukd appreciate help with. I use Visual
Studio Installer to create an msi file. Two of the components to be
installed are mfc based activex controls generated using Visual Studio
C++
6
Activex Controlwizard. They were both created in the same way,
using
the
wizard. Both of them have the same DllRegisterServer and
DllUnRegisterServer
functions. When the msi file is run, both controls register
properly
for
the
user that ran the msi, but for another user, only one of the two
registers
properly.

Before the install I make sure that there are no entries for either
control
in HKEY_CLASSES_ROOT for either user. After the installation, for the
first
user there is an entry for each control, including the proper
CLSID
and
a
value Insertable.For the second user, one of the controls has the entry
as
well, including the Insertable value, but without a CLSID value, while
the
other correctly has the CLSID.

How can this be? Any and all help is appreciated!

Rob
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top