La détection de la présence d'un répertoire à l'installation
Dans WiX DirectorySearch
peut être utilisé pour déterminer si un répertoire existe sur l'ordinateur cible. Mais je ne comprends pas si il y a une manière cohérente pour déterminer qu'un répertoire ne pas existent.
Par exemple:
<Property Id="INSTALLDIR" Secure="yes">
<RegistrySearch Id='InstallDir' Type='directory'
Root='HKLM' Key='Software\Company\Product\Install' Name='InstallPath'/>
</Property>
<Property Id='IS_INSTALLED' Secure='yes'>
<DirectorySearch Id='IsInstalled' Path='[INSTALLDIR]' />
</Property>
Lorsque la clé de registre ainsi que le répertoire existe pas, le IS_INSTALLED
propriété est définie sur le chemin retourné par DirectorySearch
.
Si le répertoire n'existe pas, IS_INSTALLED
semble être fixé à "C:\".
Est une condition du type:
<Condition>NOT (IS_INSTALLED = "C:\")</Condition>
un moyen fiable de détecter que le répertoire a été trouvé? Est-il un meilleur moyen?
Réponse: Voici WiX code basé sur mrnxs répondre que j'ai accepté
<Property Id="PRODUCT_IS_INSTALLED" Secure="yes">
<RegistrySearch Id='RegistrySearch1' Type='directory'
Root='HKLM' Key='Software\Company\Product\Version\Install' Name='Path'>
<DirectorySearch Id='DirectorySearch1' Path='[PRODUCT_IS_INSTALLED]'/>
</RegistrySearch>
</Property>
<CustomAction Id='SET_INSTALLDIR'
Property='INSTALLDIR'
Value='[PRODUCT_IS_INSTALLED]'/>
<InstallExecuteSequence>
<Custom Action='SET_INSTALLDIR' After='AppSearch'></Custom>
</InstallExecuteSequence>
OriginalL'auteur Brian Gillespie | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Habituellement, cela se produit lorsque la propriété est utilisée en tant que propriété-basé dossier. Dans ce cas, le CostFinalize d'action définit automatiquement la propriété d'un chemin d'accès valide (par exemple "C:\") de sorte que le dossier peut être utilisé par le programme d'installation de Windows.
Depuis ce chemin d'accès est généré automatiquement, vous ne pouvez pas être sûr qu'il sera "C:\" sur toutes les machines client, de sorte que vous ne devriez pas utiliser cette valeur dans votre état. Au lieu de cela, vous pouvez essayer ceci:
Par exemple, si votre recherche est IS_INSTALLED votre dossier peut utiliser IS_INSTALLED_PATH. IS_INSTALLED_PATH peut être définie à un chemin d'accès par défaut et après AppSearch action, vous pouvez le configurer pour IS_INSTALLED si la recherche a trouvé quelque chose.
De cette façon, vous pouvez utiliser pour le conditionnement:
ou
La recherche propriété est définie à la racine du lecteur, que si cette propriété est associée à un dossier dans votre MSI. Si vous enlevez cette association (par exemple en utilisant une autre propriété pour le dossier), la recherche de la propriété doit être vide quand il n'est pas de trouver quoi que ce soit. Fondamentalement, votre recherche de propriété doit être utilisé uniquement par la recherche pour s'assurer qu'il est configuré de la manière que vous voulez.
OriginalL'auteur user527987
Understaing AppSearch de RegLocator et DrLocator modèles peut être un peu délicat. Je vous conseille d'ignorer l'état, pour un moment, et l'enregistrement de l'installation pour vérifier que AppSearch est de définir correctement les propriétés que vous souhaitez. Résoudre les problèmes que vous trouverez sur cette fin de première. Lorsqu'il fonctionne à la propriété est définie à la valeur de la base de registre ou le chemin d'accès au répertoire.
Alors vous devriez être en mesure d'utiliser:
Btw, je voudrais éviter d'utiliser la propriété DIR. Dans mon installateurs ( InstallShield ) qui a une signification particulière comme le principal point focal de l'installation.
OriginalL'auteur Christopher Painter
Une autre approche pourrait être, dans cette vous pouvez continuer la Séquence d'Installation si vous souhaitez définir la Dir de n'importe où ailleurs, si le SystemDir et RegisteryDir n'est pas la même
OriginalL'auteur hardik arora