Comment résoudre l'erreur WIX0217 avec une solution .net 8 ?
Suite à la mise à jour de serveurs de build, je me suis retrouvé avec une bonne grosse erreur de Wix Toolset :
##[error]wix.exe(0,0): Error WIX0217: Error executing ICE action 'ICE02'. The following string format was not expected by the external UI message logger: "Impossible d'accéder au service Windows Installer. Ceci peut se produire si le programme d'installation de Windows n'est pas bien installé. Contactez votre support technique pour assistance.".
Celle-ci se produit lors de l'usage de la tâche DotNetCoreCLI
d'Azure Pipeline. Cette tâche cherche à compiler une solution Wix Toolset 4 avec le SDK de .net 8.
Petite étrangeté : la même opération fonctionne très bien dans Visual Studio, ou via la CLI de .net 8.
Quand on connait un peu wix toolset, et que l'on consulte les logs, on se rend vite compte que le problème se produit lors de la validation du msi. La tentation est grande de désactiver cette validation. Surtout, ne faites pas cela. Ne touchez pas à votre projet. Même pas pour ajouter un RunWixToolsOutOfProc (cela ne sert à rien). Le problème n'est pas là. Le problème est lié au serveur de build, et au contexte dans lequel celui-ci s'exécute.
Historiquement, l'erreur 217 se produisait avec wix toolset 3. Celui-ci utilisait un bon vieux vbscript pour exécuter la validation. Aujourd'hui, vbscript n'est plus utilisé, mais le code d'erreur reste le même. J'ai jugé bon de tenter la solution que j'avais déjà documentée il y a quelques années ici.
Il se trouve que le changement du compte du service Windows de l'agent en Compte système local
avec l'autorisation d'interagir avec le Bureau résout le problème.
Important : ne pas oublier de redémarrer le service après changement de ce compte.
Il s'agit certainement d'un problème pour accéder à une ressource de type PATH, DLL, ou un enregistrement de ressource qui ne peuvent pas être utilisés en dehors de ce contexte.