cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
obrion
Level 3

When are Microsoft (ATL) Merge Modules "published" on Windows Vista?

Or...

How do I get my service that requires ATL 8.0 to start during installation?

I have a service that i need to register and start during installation of our product. The service is an ATL/COM service that is built using Visual Studio 2005 SP1 and uses ATL 8.0 (8.0.50727.762). I have included the Microsoft ATL 8.0 Merge Module into our installation in order to correctly install the requisite files. This works fine on WIndows XP. However, on WIndows Vista the service fails to start during the StartServices action. Since the install halts (error 1920) when this happens, it is easy to poke around and see what is wrong. It turns out that the necessary ATL package has been installed to "C:\Windows\winsxs\InstallTemp\" but it has not yet seemingly made it's way into the recognizable WinSxS location as SxSTrace says it cannot be found.

At what point does this assembly get fully published to the WinSxS location? Is there any standard action I can add to the installation sequence to force it to be published? Any ideas for how to get a service to start during the StartServices action if the installation is also installing pre-requisties to WinSxS?

Thanks!

Robert O'Brion
AT&T Labs
Labels (1)
0 Kudos
(1) Reply
Christopher_Pai
Level 16

Unfortunatly WinSxS and GAC components are published until the COMMIT phase of inside InstallFinalize. This create a race problem if you are trying to start a service which runs in the deferred phase.

Yah, I know... dumb. I don't agree either. SxS and GAC doesn't provide a good mechanism to rollback changes so the MSI team choose to give rollback more importance then things actually working.

Commit CA's are supposed to be used for cleaning up rollback data but heh, what do I know.... I've just been writing installs for 12 years.

So there's really only a couple of things you can do:

1) Static link the ATL libs into your service EXE
2) Deploy the libraries privatly to the EXE
3) Deploy the libraries as a setup prereq using setup.exe so that it's already in the SxS before you install starts.
0 Kudos