I guess this would be considered a design question.
So I have a service that's essentially installed in two steps: first PythonService.exe is installed as the service, then HKLM\...\PythonClass is set to some class. Then the service is started.
Now, to decrease the overall horribility of the design, I have packaged python as a merge module, since it a) constitutes the large majority of my application's total fileage, and

doesn't change much. But at least as far as installshield is concerned, ServiceInstall belongs to the MSI and not to the MSM. And the whole theory of merge modules is that they get submerged in the MSI. So just on the general principle of keeping related parts together, it seems to me like the MSM should install the service (since it owns the .exe), then the MSI should create the reg key that associates the generic python service with the class, and then start and stop the service according to what's going on in the installation. But the MSM doesn't seem to have a ServiceInstall table that would get merged into that of the MSI. The next most sensible thing I could see would be just adding a ServiceInstall row in the MSI, but that makes it depend on a file that isn't there until merge time. I don't know whether that's the sort of reference violation that bothers WI, or just me.
Thoughts?