2010-10-19 9 views
0

Je application simple de la console C#:WIX: Comment définir la propriété de l'application de la console .NET

static int main(string[] args){ 
    return SomeBoolMethod() ? 1:0; 
} 

Comment dans WiX 2.0 dois-je définir la propriété et définir cette valeur à elle? Je ne me soucie pas de future mise à jour/désinstaller

UPD

Je veux cette dernière utilisation de cette propriété en bon état: si le groupe B ne sera pas exécuter si MYPROPERTY == 0 mais tous les autres composants en fonction F_A sera I.E.

<Feature Id="F_A" Level="1"> 
    <Condition Level="0">NOT INSTALLED</Condition> <!-- Another custom property --> 
     <ComponentGroupRef Id="B" /> 
    <ComponentRef Id="C_AnotherComponent" /> 
    </Feature> 

<ComponentGroup Id="B"> 
    <Condition Level="0">NOT MYPROPERTY</Condition> <!-- property that set in console--> 
    <ComponentRef Id="C_ComponentName" /> 
</ComponentGroup> 

TIA

+2

Je pense que ce que vous voulez obtenir n'est pas clair. Êtes-vous en train de créer un programme d'installation pour cette application ou est-ce que l'application est censée donner une valeur à wix en exécutant cette application dans le processus de construction du programme d'installation? – steinar

Répondre

1

exécutables lancés comme des actions personnalisées n'ont pas accès à la session d'installation, donc ils ne peuvent pas modifier une propriété. Idéalement, vous réécrire le code qui est actuellement dans un exe pour résider dans une DLL, de sorte qu'il pourrait être appelé comme une action personnalisée dll. Si vous ne pouvez pas réécrire des choses (vous avez peut-être reçu l'exe d'ailleurs), vous devez écrire une action personnalisée dll qui lance l'exe, examine son code de sortie et définit les propriétés en conséquence.

Dans les deux cas, vous n'avez pas besoin de prédéfinir la propriété; vous pouvez simplement le définir dans l'action personnalisée dll. Dans les deux cas, si la DLL est écrite en C#, vous devrez utiliser une technologie comme DTF pour l'appeler, car Windows Installer ne peut pas invoquer directement le code managé.