Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

C# Windows NT Service in a merge module


1 reply to this topic

biasosoft

biasosoft
  • Full Members
  • 1 posts

Posted 14 July 2008 - 17:20

Hi,
I'm developing three .net applications that depends on the same windows NT service for running. Each one of the three .net application are to be installed indipendentely from the others on the same PC and of course are to be distributed separately. The version compatibility to the service interface is not an issue.

I wrote 4 Visual Studio 2005 setup projects:
0. Merge Module Setup Prj: Win NT Service + its Config App
1. Win App Setup Prj: app A + Merge Module
2. Win App Setup Prj: app B + Merge Module
3. Win App Setup Prj: app C + Merge Module

In project 0, for registering/unregistering the Windows Service I'm using Custom Actions (as suggested by Microsoft) where I put the primary output of the project of the service.

Each setup install and/or uninstall of App A, App B, App B works fine but, when I try to execute the installation of App x after App y on the same PC, a message "Service already present" appears and the second installation is rolled back.
In my opinion it seems that the custom actions inside the merge module are always executed, even if the merge module is not installed (this should be true for the second installed application)

I tried to apply conditions to the custom actions in the merge module:
Install= "NOT Installed", Uninstall= "Installed AND REMOVE"
but this does not seem to work.

Is there any way I can get out of this problem?

I think this is supposed to be a common problem when creating setups for different apps sharing same services.

Thanks in advance,
Luca



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 14 July 2008 - 20:46

Merge modules are not installed as entities of their own. Instead they become part of the product at the time you build the msi file. So Installed etc. always mean the product, not the module.
Instead, you have to use conditions based on the selection state of a component in the merge module, like
$YourComponent=3
See help topic "Conditional Statement Syntax" for details.