Assiste.com
cr 01.04.2012 r+ 22.10.2024 r- 22.10.2024 Pierre Pinard. (Alertes et avis de sécurité au jour le jour)
Sommaire (montrer / masquer) |
---|
WinSxS = (Windows Side-by-Side) - formellement "winsxs", tout en minuscules.
Des gigas octets et des dizaines de milliers de fichiers !
Mais qu'est-ce que ce répertoire dont l'emplacement est :
C:\Windows\Winsxs
Sous Windows Vista, Windows 7 ou Windows 8, ce répertoire est gigantesque et inflationiste, alors que sous Windows XP, sous le nom de $NTUninstall, il oscille entre 25 et 50 MO seulement (Note : le répertoire WinSxS, à partir de Windows Vista, remplace l'ancien répertoire $NTUninstall de Windows XP).
Le mien, sous Windows 7 Intégral, pèse, au jour de la rédaction de cet article, 12,5 GO pour 68 876 fichiers dans 16 582 dossiers ! C'est fou ! C'est la moitié de tout le répertoire Windows !
Cherchons l'erreur !... Et observons que ce n'est pas du tout une erreur, ni en taille ni dans le fait qu'il pèse, justement, la moitié de la taille totale de Windows.
Microsoft, dans la bouche de l'un de ses employés, ( Joseph Conway - Senior Support Escalation Engineer - Microsoft Enterprise Platforms Support ) dit que la taille normale de ce magasin de composants devrait se situer entre 8 et 12 GO, ce qui se vérifie ici.
Note : AMD64
Les références à AMD64, dans ce répertoire, sont une référence générique aux architectures 64 bits et n'ont rien à voir avec, spécifiquement, l'architecture des processeurs de la marque AMD. Le nommage AMD64 est sans doute malheureux et a porté à confusion avec des effacements intempestifs de fichiers, effacements lourds de conséquences. Ne touchez pas à WinSxS !
|
Pour des raisons de simplification de son écriture et de sa maintenance, Windows utilise un assemblage de composants, chacun ayant une fonction bien définie et une maintenance plus facile (un composant pouvant être constitué de plusieurs fichiers).
Initialement, les Dlls étaient simplement stockées dans un répertoire commun à toutes les applications, mais certaines applications se permettaient de modifier / mettre à jour une Dll en écrasant la version précédente, lors d'une installation ou une mise à jour, mettant en péril toutes les autres applications utilisant cette Dll, ainsi que le système Windows lui-même.
Microsoft a introduit le concept d'assemblage " Side-by-Side " (SxS) dès Windows XP (la notion de DLL étant formalisée à partir de Windows 95 et la notion de liens dynamiques ( édition des liens ) remontant, elle, au tout début de Windows, dès la version 1.0 en 1985 - la première version publique étant la 1.01 du 20 novembre 1985).
La taille de Windows a simplement basculé, en grande partie, vers un magasin de composants : WinSxS. C'est juste une histoire de vases communiquants. Windows est plus petit et WinSxS est apparu. La taille totale reste constante (à ceci prêt que les versions successives de Windows sont de plus en plus grosses).
La taille de WinSxS devrait faire environ la moitié de la taille totale de Windows. Ceci est vérifié deux fois, ci-après :
Répartition du poids des répertoires constituant Windows 7 Ultimate sur une machine d'Assiste Utilisation du logiciel WinDirStat WinSxS est le magasin de tous les composants Windows, ce qui représente la moitié de la taille totale de Windows |
WinSxS est l'unique endroit où sont réellement stockés les composants du système. Toutes les autres instances de composants, vues à travers les autres répertoires, sont des projections, par des liens symboliques (autrefois appelés " liens en dur " (hard links) mais étendu au multi-volumes et multi-systèmes de fichiers). C'est aussi l'une des raisons pour lesquelles il ne vous est plus demandé d'insérer un média lors de l'utilisation de la commande SFC (System File Checker).
Le dossier WinSxS est donc un « réservoir » (un « magasin ») où Windows stocke tous les composants, dont ceux appelés « DLLs », en plusieurs exemplaires apparents (en réalité, il s'agit de « liens symboliques », un par application utilisant le composant), afin de permettre aux diverses applications utilisant la même « DLL », enfin..., une DLL portant le même nom, de s’exécuter sans problème. WinSxS coordonne les différentes versions des DLLs (les DLLs portant le même nom).
S'il manque une DLL, vous risquez de ne plus pouvoir utiliser l'une de vos applications, voire de ne plus pouvoir du tout exécuter Windows.
Pourquoi ? Et, tout d'abord, que sont les DLLs ?
|
Que sont les ressources communes trouvées dans WinSxS, en particulier les « DLLs » (les « DLLs » ne sont pas les seules ressources communes (partagées) présentes dans WinSxS) ?
Les « DLLs » (Dynamic Link Library) (bibliothèque de liaisons dynamiques) sont des fonctionnalités standards se traduisant par des composants (bouts de programmes standards), exécutant une fonction spécifique courante que l'on va retrouver dans de nombreuses applications. La notion de composants logiciels (une brique logiciel) liés à une architecture logiciel de plus haut niveau (une application) existe depuis toujours, sous divers noms. C'est le concept du DRY (Don’t Repeat Yourself - Ne vous répétez pas).
Les DLLs sont fournies par les éditeurs de logiciels, Microsoft bien entendu, et les grands éditeurs produisant de nombreuses applications (Adobe etc. ...).
Donc, les DLLs, c'est génial... Cela ne présente que des avantages (lire : DRY (« Don’t Repeat Yourself » - « Ne vous répétez pas »)) !
On peut voir quelles sont les DLLs utilisées par une application (et autres composants externes), et, éventuellement, rechercher quelles sont les DLLs et autres dépendances manquantes, avec Dependency Walker.
Les notions de « composants liés à l'architecture d'un programme principal », au moment de sa « post compilation » (phase dite d' « édition des liens »), existe depuis la nuit des temps informatiques.
J'utilisais des éditeurs de liens sur IBM 360 au tout début des années 1970. La dixième édition de ce document d'IBM sur l'édition des liens sous l'OS des IBM 360 remonte à 1972 !
Dans Windows, la notion de composants remonte au tout début de Windows, dès sa version 1.0, en 1985. L'enfer des DLLs conduira Microsoft à réagir avec un magasin de composants contenant toutes les formes de composants utilisées, dont les DLLs. Ce magasin prend le nom de WinSxS, à partir de Windows Vista.
Ce magasin sera protégé, ne pouvant être manipulé que par des applications elligibles au compte utilisateur spécial « TrustedInstaller » et à travers une procédure particulière.
|
L'utilisateur descend dans l'enfer des DLL, le fameux « DLL Hell », dès qu'une DLL est manquante ou ne répond plus à ce que l'on attend d'elle :
DLL Hell est un nom désignant un ensemble de problèmes rencontrés avec le concept de DLL sous Windows dont les problèmes de conflits de versions, de DLL manquante, de DLLs dupliquées, de DLL pas, plus ou mal enregistrée dans le Registre Windows, etc. ... Pourquoi ?
|
Un peu après WinSxS (à partir de Windows Server 2008) est apparu WRP (Windows Resource Protection) qui empêche tout remplacement des fichiers, répertoires et clés du Registre Windows essentiels au fonctionnement de Windows.
Les permissions totales d'accès pour modifier les ressources protégées par WRP (Windows Resource Protection) sont restreintes au compte utilisateur spécial appelé TrustedInstaller, qui a un contrôle total sur ces ressources, et ces ressources ne peuvent être modifiées qu'en utilisant un mécanisme appelé « Supported Resource Replacement Mechanisms » applicable aux installations des :
On remarquera que, aussi loin que l'on puisse chercher sur le site de Microsoft ou sur technet.com, il n'est jamais question de vider ou alléger WinSxS, ni d'effacer des DLLs ou des assemblages. C'est la contrepartie de toute la sécurité imposée autour des DLLs auxquelles, justement, il n'est pas question de toucher.
|
WinSxS est, depuis Windows 95, la réponse de Microsoft aux cauchemardesques problèmes de plantage (« Écrans bleus de la mort » ou petite fenêtre avec ce laconique message "DLL pas trouvée") pour cause d'incompatibilités entre DLLs.
Une application, lors de son installation, fige désormais dans le répertoire WinSxS les versions de DLLs avec lesquelles elle a été testée et avec lesquelles elle est livrée et fonctionnelle. Si des mises à jour d'une DLL interviennent par la suite, ces mises à jour n'affecteront pas l'application déjà installée.
Une dépendance est créée et est inscrite dans la base de registre : l'application est désormais dépendante de l'existance de cette version précise de la DLL, dans le répertoire WinSxS.
Ceci sert également, mais beaucoup plus discrètement, à régler une incompétence architecturale des processeurs Intel et de Windows. Ce couple « WinTel » infernal est incapable de n'avoir qu'un seul segment de code commun, monté une seule fois en mémoire, au service de toutes les tâches l'utilisant. Il y a autant de copies de la « DLL » montées en mémoire (“Side-by-Side” – « Côte à côte ») que de tâches l'exploitant. Cette technologie existe pourtant, depuis bien avant les PC, sous le nom de « réentrance ». Il n'y a que les DLL ne manipulant pas de données applicatives qui peuvent n'être présente qu'une fois en mémoire, mais ceci s'oppose au point suivant.
Ceci sert enfin à tenter de régler un problème récurent d'irrespect des frontières des zones mémoire RAM d'une tâche par une autre tâche (Stack overflow). Le confinement (isolement) de chaque tâche à son espace mémoire (mode protégé), sans violation de ses frontières, semble très difficile à obtenir sous WinTel.
Ce problème de duplication de DLL « côte à côte » est l'une des raisons de l'inflation continue des mémoire RAM et mémoire disque pour camoufler l'incompétence technologique WinTel. De la même manière, la poursuite de la performance se fait par l'augmentation perpétuelle des cycles horloge des processeurs à architecture x86, idée tellement facile à faire gober (et à vendre, au sens propre et au sens figuré) à un public benêt, alors que 97% du temps des processeurs est affecté à l'exécution d'instructions de non opération au lieu de se mettre en état d'attente (idle) préemptible ! Le "temps réel" des PC n'existe pas et n'est, en réalité, qu'un temps différé et un partage de temps (time sharing) de plus en plus rapide !
Il y a également autant de copies de cette même DLL dans le répertoire WinSxS qu'il y a eu de programmes l'ayant utilisée un jour, chaque copie étant classée dans un sous-répertoire de WinSxS. Mais, dans la réalité, il n'y a qu'un seul exemplaire d'une version particulière d'une DLL, les autres ne sont que des apparences, des projections à l'aide de lien symboliques.
Si vous installez de nombreux programmes, pour les tester par exemple, le répertoire WinSxS va être explosif et il faut utiliser un désinstalleur professionnel comme Revo Uninstaller ou Total Uninstall.
Dirigez-vous vers le répertoire C:\Windows\winsxs et regardez le contenu de ses sous-répertoires. Vous allez y trouver des fichiers, « n » fois, sous le même nom, et avec exactement le même contenu. Vous pouvez le vérifier en utilisant un outil comme « SummerProperties » ou « HashTab » pour calculer les « sommes de contrôle » (« condensat » ou « hashcode ») et vous assurer que ce sont strictement les mêmes, au bit près).
|
Vider ou ne pas vider le répertoire WinSxS ? Là est la question.
Compte tenu de ce qui vient d'être dit ci-dessus, tout le monde à compris que le répertoire WinSxS est l'aveu des éditeurs de DLL, dont Microsoft, que le principe est beau sur le papier mais ne fonctionne absolument pas dans la réalité. Chaque application utilise ses propres versions de DLL standards, ce qui est la négation même de la notion de standard !
Sauf cas exceptionnel où toutes les applications sur un ordinateur proviendraient du même éditeur et d'aucun autre, et que toutes soient mises sur le marché au même moment, donc avec les mêmes versions de DLL pour toutes les applications, cas de figure qui n'existe pas, IL NE FAUT PAS TOUCHER à WinSxS !
En cas de disparition d'une entrée dans le répertoire WinSxS, la dépendance d'une application aux ressources qui doivent, normalement, se trouver dans le répertoire WinSxS, risque de rendre l'application inutilisable. Windows va tenter de trouver des ressources portant le même nom, ailleurs, mais le risque de version incompatible de la ressource existe et le résultat sera le même : application inutilisable.
Dès 2001, dans un article, Microsoft écrivait "...les composants côte à côte (Side-by-Side dans WinSxS) sont le futur du développement de Windows". Et WinSxS arriva avec Windows XP !...
Dans un article d'octobre 2012, Microsoft écrivait que l'isolement des applications et les assemblages côte à côte (Side-by-Side dans WinSxS) sont une solution Microsoft Windows pour réduire les problèmes de conflits de versions. Microsoft écrit bien "réduire" et non pas "supprimer".
La nouvelle solution de Microsoft, uniquement pour les applications développées avec le langage de programmation Visual C++, est les "assemblys" de Microsoft .NET Framework. Les ressources "standards" sont assemblées dans l'application elle-même, réglant ainsi définitivement le problème dit "DLL HELL" (ne concerne que les applications développées avec le langage de programmation Microsoft Visual C++ et faisant appel à l'usine à gaz Microsoft .NET Framework).
NE TOUCHEZ PAS à WinSxS ou retombez dans le DLL HELL ! Le seul moyen de toucher à ce répertoire et de désinstaller une application complètement avec Revo Uninstaller ou Total Uninstall.
|
Il est possible d'alléger tout de même WinSxS, de manière sûre, en nettoyant les fichiers de sauvegarde inutiles après installation d'un Service Pack.
Longtemps après avoir installé un Service Pack, s'il s'avère que tout est stable, il est possible de virer les fichiers d'installation de ce Service Pack.
Ceci rend impossible le retour arrière vers la version de Windows précédent l'installation du Service Pack (SP), raison pour laquelle il est recommandé d'attendre au moins un mois, jusqu'au " patch tuesday " suivant (jusqu'au prochain Windows update mensuel, le second mardi du mois suivant l'installation du Service Pack).
Il ne s'agit pas d'utiliser "Ajout/Suppression de programme" (ou "Programmes et fonctionnalités" dans les versions plus récentes de Windows).
Faire de la place dans WinSxS de Windows 7 SP 1 ou Windows Server 2008 R2 SP 1 installé - méthode 1
Il faut utiliser une commande sous un compte administratif (ou avec demande d'élévation de privilèges - "Exécuter en tant qu'administrateur"). Cette commande va, entre autres choses, alléger WinSxS de certaines copies de composants ( DLLs...) sauvegardées sous l'inscription du Service Pack.
Ouvrir une « Invite de commande » en tant qu'administrateur
Vérifier, sous Windows Vista, Windows 7, Windows 8, Windows 10, que la fenêtre de l' « invite de commande » soit bien en mode « Administrateur » en regardant l'indication du mode d'exécution dans sa barre de titre.
Saisir l'une des commandes suivantes :
(Comprendre : spsuperseded = Service Pack remplacé)
Attendre la fin du travail. Une fois terminé, les fichiers superflus auront été supprimés et, selon ce dont il s'agissait, vous aurez récupéré un espace disque pouvant se mesurer à quelques gigas octets !
Utilisez la fonction de Windows : Nettoyage de disque (assistant cleanmgr.exe de Windows)
C'est tout ! Ne tentez rien d'autre. Ne supprimez rien manuellement dans WinSxS.
Il n'est pas possible de déplacer le répertoire WinSxS sur un autre volume que le volume système en raison des liens réels NTFS..
Ne pas perdre de vue que WinSxS contient beaucoup de dll sous forme de liens vers l'emplacement réel de la dll (la Dll n'est pas physiquement dans WinSxS mais ailleurs - les liens sont des liens dits " symboliques "). La taille apparente de WinSxS n'est pas sa taille réelle (oui, je sais... Windows n'est pas aisé à appréhender) mais est la taille de toutes les Dlls qu'il contient augmenté de toutes les Dlls vers lesquelles il pointe.
|
WinSxS : bibliothèque des ressources de Windows
Les encyclopédies |
---|