Problème avec Windows Update & .NET, Sysinternals et l'enfer des DLLs

Cette après-midi, j'ai enfin résolu un problème d'installation de Microsoft .NET Framework qui datait de presque un an.

Dans l'espoir que ça puisse aider quelqu'un qui rencontre la même erreur, et parce que j'ai appris à utiliser un outil intéressant au passage, je me fends d'un petit article de blog pour expliquer cette mésaventure.

J'ai Windows Seven en dual-boot, et ne l'utilise plus très souvent désormais, essentiellement pour jouer à des jeux vidéos de temps en temps. En relisant mes notes de debug d'août 2014, où ce problème m'a explosé à la tronche pour la première fois, je vois beaucoup de détresse.

Mark Wahlberg angry smashes a computer

J'ai passé plusieurs dizaines d'heures à essayer de résoudre le souci, pour finalement abandonner. Tout a commencé par une erreur 0x80073712 systématique de Windows Update, empêchant toute mise à jour du sytème. Je retranscris ici l'intégralité de mes périgrinations, peut-être que quelqu'un y reconnaîtra des symptômes:

Mais cette après-midi donc, voulant pouvoir jouer à Towerfall Ascension que je venais d'acquérir, je me repenche sur le problème, et trouve un article de blog expliquant la solution : MERCI mille fois Soumitra Mondal !!!.

L'origine du problème ? Des DLLs corompues (ou aux permissions incorrectes, allez savoir). Mais le plus intéressant dans cette histoire, ça a été la réponse de atverweij sur ce thread du support Microsoft, indiquant qu'il avait identifié les fichiers posant problème grâce au Process Monitor des Sysinternals.

Les Sysinternals sont de fantastiques outils, fournis par Microsoft mais pas installés par défaut, permettant de véritablement comprendre et résoudre de nombreux comportements obscurs de Windows. Le genre de bugs incompréhensibles pour lesquels mes seuls alliés auparavant étaient Google et les fantastiques communautés d'internautes des forums d'aide Windows.

En voici quelques uns (j'utilise les 3 régulièrement comme dev ou gamer) :

  • Process Explorer a depuis longtemps remplacé l'explorateurs de processus Windows de base sur mon PC. Il est bien plus complet, fournissant entre autres des graphes d'utilisation CPU / IO et une arborescence des processus (à la pstree sous Linux). Il permet ausi de lister les fichiers ouverts par des programmes, et ainsi de trouver cet enfoiré de @#%£&§ de processus qui empêche la suppression d'un fichier.
  • TCPView est l'équivalent d'un netstat sous Linux. Très utile pour déterminer quel processus utilise quel port !
  • Processus Monitor enfin, permet entre autres de déterminer les tentatives d'ouverture de fichier râtées d'un processus. C'est un peu l'équivalent d'un strace sous Linux.

Grâce à ce dernier outil, j'ai bien vérifié qu'il m'aurait été possible de déterminer à cause de quel fichier récalcitrant mon installateur de Microsoft .NET Framework 4 plantait systématiquement.

Ce post n'a pas pour but de décrire comment se servir de tous les outils, mais je vous recommande cet article de HowToGeek qui est une bonne introduction aux Sysinternals.