Résoudre l’Erreur 217 rencontrée avec Azure Pipeline et WIX
Si vous souhaitez mettre en place un pipeline de build utilisant WIX pour générer vos fichiers .msi il est possible que rencontriez l’erreur 217.
En se reportant à la documentation de WIX, on constate qu’il s’agit d’un problème d’exécution de scripts VBScript. Mais les solutions proposées ne s’appliquent pas à des environnements récents (Windows Server 2012 à 2019, ou Windows 8 à 10). Si vous y regardez de plus près, vous ne trouverez pas les clés de registre évoquées.
Ces scripts joint un rôle important dans la vérification des fichiers .msi produits. Il ne faut donc pas les désactiver.
Mais si l’on tente d’exécuter un petit script VBScript sur le serveur, on constatera qu’il s’exécute parfaitement.
Quelle est la source du problème ?
Le problème vient en fait de la seule différence existante entre votre contexte d’exécution et celui de l’agent de build.
Par commodité, l’agent de build s’exécute le plus souvent en mode service Windows avec le compte de service réseau. Dans ce cas, le compte à les droits pour effectuer l’ensemble des actions de manipulation de fichiers et de build. La seule chose qui lui est impossible est d’interagir avec le bureau. C’est justement ce dont les scripts VBScript de WIX ont besoin pour s’exécuter.
Quelle solution appliquer ?
Pour pouvoir utiliser WIX, il suffit donc de modifier le compte qui sert à exécuter le service et de lui donner le droit d’interagir avec le bureau.
Pour cela, on ouvre la console des services Windows. Il faut alors identifier le service (préfixé par Azure Pipeline pour les versions récentes ou VSTS Agent pour les anciennes versions).
Un click droit sur le service permet d’éditer les propriétés du service.
La partie à modifier se trouve sur l’onglet « Connexion ».
Il suffit de sélectionner le compte système local et de cocher la case autorisant les interactions avec le bureau.
Après validation des modifications, on a droit à un avertissement qui indique que notre modification n’interviendra qu’après redémarrage du service.
Soit on utilise les commandes situées sur la gauche de la console, soit on effectue un click-droit et on utilise la commande « Redémarrer ».
Moralité
Voilà, simple, efficace et sans détruire son serveur de build.