2010-03-04 5 views
2

J'ai un composant que je dois installer seulement s'il existe une clé de registre qui signifie qu'une application a été installée.Wix conditionnellement installer le composant si la clé de Registre existe

Je dois attribuer la valeur de la clé de registre (c'est un répertoire) à une propriété, puis utiliser cette propriété pour copier des fichiers.

J'ai le script suivant jusqu'à présent mais obtenir une erreur "Le système ne peut pas trouver le fichier" [MYTESTDIR] fileToCopy.dat '. "

Toute aide serait vraiment appréciée.

<Property Id="MYTESTDIR"> 
    <RegistrySearch Id="NetFramework20" 
      Root="HKLM" 
      Key="SOFTWARE\TEST\VALUE\1.00" 
      Name="MyName" 
      Type="directory" /> 
</Property> 

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="TEST" Name="Test">  
      <Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69"> 
       <Condition>MYTESTDIR</Condition> 
       <File Id="fileToCopy.dat" Name="fileToCopy.dat" Source="[MYTESTDIR]fileToCopy.dat"> 
        <CopyFile Id="fileToCopy.datCopy" DestinationProperty="WEBSERVICEBINFOLDER" /> 
       </File> 

     </Directory>    
    </Directory> 
</Directory> 

<Feature Id="MyFeature" Title="MyFeature" Level="1"> 
    <ComponentRef Id="MyComponent" /> 
</Feature> 

Répondre

5

Sur la base de ma lecture de la documentation Wix schéma, votre problème est que vous avez l'élément CopyFile imbriqué sous un élément de fichier. Laissez tomber l'élément de fichier et juste ont le CopyFile assis sous le composant:

<Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69"> 
    <Condition>MYTESTDIR</Condition> 
    <CopyFile Id="fileToCopy.datCopy" SourceName="[MYTESTDIR]fileToCopy.dat" DestinationProperty="WEBSERVICEBINFOLDER" /> 
</Component> 

La façon dont vous l'aviez, niché sous le fichier, Wix recherchait le fichier sur votre système lors de la construction - plutôt que de mettre en place un commande de copie à exécuter au moment de l'installation.

1

MYTESTDIR est une propriété d'installation de Windows qui obtiendra sa valeur sur le système cible lors de l'installation du package.

Cependant, vous essayez d'utiliser cette propriété dans un attribut Source, qui est utilisé pour pointer vers des fichiers sur le système où le package d'installation est en cours de construction.

Évidemment, cela ne va pas fonctionner. Les propriétés du programme d'installation de Windows n'existent même pas lorsque l'attribut Source est en cours d'évaluation. Par conséquent, Source ne peut certainement pas prendre en charge une telle utilisation.

La réponse de Bryan est la bonne solution pour ce que vous essayez de faire ici. L'utilisation de CopyFile sous un élément File n'est pas illégale, mais elle est destinée à la copie de fichiers que vous installez également. Dans ce cas, vous voulez copier un fichier qui se trouve déjà sur le système cible, donc l'élément File n'est pas approprié.

Questions connexes