L’assistant de résolution de problème de Windows 7
Introduction :
Lorsque vous achetez un nouveau logiciel ou un nouveau périphérique, ce que vous souhaitez, c’est que cela fonctionne immédiatement, et il n’y a rien de plus frustrant lorsque ce n’est pas le cas.
Le problème est peut-être bénin, mais les heures à essayer de le dépanner peuvent s’enchainer à un rythme effréné, surtout si les utilisateurs de votre logiciel ne sont que des utilisateurs et non pas des informaticiens.
Imaginez un système qui pourrait chercher, trouver et réparer automatiquement ce type d’erreurs bénignes ?
Imaginez les heures de support et de maintenance gagnées si un tel système existait ?
C’est dans cette voie que s’engage Microsoft Windows 7 avec sa nouvelle plate-forme de Résolution de problème (Windows Troubleshooting Pack).
Prenons un exemple concret. Je souhaite naviguer avec Internet Explorer sur le site https://msdn.microsoft.com, mais je reçois à la place une belle page d’erreur comme sur la figure suivante :
Manifestement j’ai un problème de connexion, mais en tant qu’utilisateur novice, je ne sais pas comment y remédier. Avant Windows 7, j’aurais tout simplement pris mon téléphone et contacté mon service informatique interne. Avec Windows 7, je clique sur le bouton Diagnostique les problèmes de connexion.
Le système de résolution des problèmes se met en route
Et trouve dans un 1er temps que l’accès physique à ma carte Wifi n’est pas possible et que pour résoudre mon problème il suffirait de basculer l’interrupteur pour la rendre active. En le faisant cela résout le problème de connexion, mais je décide pour notre démonstration, d’ignorer cette étape et de continuer à essayer de résoudre le problème.
A cette étape, le système de résolution a trouvé que ma connexion réseau Ethernet n’est pas active, mais qu’il a besoin de privilèges administrateur pour tenter de le résoudre. (Je dis bien tenter car il n’y a en informatique pas de garantie à 100%)
Je clique alors sur Essayez ces réparations en tant qu’administrateur
La vérification et la résolution automatique des problèmes démarre
Si tout se passe correctement le système de résolution des problèmes affiche le statut suivant :
Il a détecté mais pas corrigé que la carte Wi-Fi n’est pas activée, et a résolu automatiquement le problème de connexion réseau.
En fermant, le système de résolution des problèmes, Internet Explorer peut alors atteindre cette fois-ci le site msdn.microsoft.com
Si vous êtes curieux de nature et que vous possédez Windows 7, je ne peux que vous encourager à aller voir le centre de résolution des problèmes.
1. Activez le panneau de configuration
2. Dans la boite de recherche en Haut à droite tapez résolution
3. Dans la liste des résultats choisissez Résolution des problèmes
4. Vous aurez alors accès à différents Assistants de résolution de problèmes.
Tout ce que je viens de vous montrer ce trouve en standard dans Windows 7 pour des fonctionnalités de bases liées au système d’exploitation.
La question qui se pose alors.
En tant que développeur de logiciel puis-je fournir ce type de fonctionnalité avec mes logiciels ?
La réponse est bien évidement oui, et surtout Microsoft le préconise comme étant une bonne pratique, source d’une nouvelle efficacité.
Je ne vais pas rentrer trop dans le détail dans ce post, mais voici ce qu’il faut retenir :
Un assistant de résolution de problèmes (Troubleshooting Pack en anglais) est constitué :
· D’un manifeste de métadonnées, sous forme de fichier XML, d’écrivant de quoi est constitué l’assistant
· D’un script de détection des problèmes
· D’un script de résolution des problèmes
· D’un script de vérification des problèmes
· Et optionnellement de ressources localisées dans la langue de votre choix
Il est possible de créer le fichier manifeste XML avec l’outil TSPDesigner.exe que l’on trouve dans le Kit de développement Windows 7.
· La première chose à faire est de créer un nouveau projet, ici nous créons un assistant de dépannage pour une application WPF qui se connecte à une base de données SQL Serveur. Cet assistant nous permettra de résoudre les problèmes de connexion au Serveur SQL
Certain champs sont requis permettant d’identifier l’assistant. Le nom du projet, ainsi qu’une URL
· Un problème est défini par sa cause (Root Cause). Ici notre cause est la non disponibilité du Service SQL Serveur. Notez l’identification de la cause DetectServiceSQL, que nous réutiliserons par la suite.
· Nous allons définir le dépanneur (troubleshooter) qui aura pour tâche de lancer un script PowerShell qui devra détecter si le service SQL Serveur est démarré ou pas.
A noter qu’il est possible d’indiquer au dépanneur de s’exécuter avec des privilèges administrateur, et que nous pouvons avoir une interaction avec l’utilisateur. C’est-à-dire qu’il est possible à ce stade de demander à l’utilisateur, soit de répondre à des questions avec une liste de choix, soit de lui demander des informations complémentaires, soit de lui afficher un message statique l’informant de l’état du dépanneur.
· Puis nous allons configurer le résolveur indiquant dans notre exemple, qu’il va tenter de démarrer le service SQL Serveur.
Le démarrage du service , se fera à l’aide d’un Script PowerShell que nous définirons ensuite. A noter que nous indiquons d’exécuter le résolveur avec des privilèges administrateur, car le démarrage du service SQL Serveur ne peut se faire qu’avec des droits élevées et que nous avons également une interaction avec l’utilisateur qui pourra relancer l’application le cas échéant.
· Puis nous informons avec le vérificateur le système de dépannage, de relancer le dépanneur pour vérifier que la cause du problème est résolue.
· Enfin, l’élément scripts permet de déterminer quels scripts seront exécutés pour le dépanneur et le Résolveur de problèmes.
· Une fois nos métadonnées, configurées, il faut créer les scripts PowerShell de détection. En cliquant soit sur Edit TroubleShooter Script et Edit Resover Script, cela lance l’interface de programmation de scripts PowerShell, Windows PowerShell ISE, comme sur la figure suivante :
Exemple de dépanneur : Détecte si le serveur SQL est lancé
Exemple de résolveur : Démarre le service SQLExpress
C’est à vous de jouer maintenant et d’utiliser la puissance de PowerShell pour créer vos propres Scripts.
Néanmoins ce qu’il faut savoir, c’est qu’il existe certaines CmdLet PowerShell qui permettent de dialoguer directement avec le système de résolution des problèmes tels que nous utilisons ici.
Write-DiagProcess qui permet d’écrire un message dans la fenêtre du résolveur, et update-diagrootcause, qui lui indique si le problème est détecté.
- Ici nous testons avec une commande WMI si le service SQLExpress est lancé.
$SQlServeur=get-wmiobject win32_service | where-object {$_.Name -like "*MSSQL*SQLEXPRESS*"}
- Si il n’est pas lancé, la cause du problème est détecté, donc on en informe le système à l’aide de la CmdLet :
update-diagrootcause -id $RootCauseId -detected $RootCauseDetected
A noter ici que cette CmdLet, a comme identifiant DetectServiceSql le même identifiant que nous avons indiqué lors de la création de la cause du problème.
la CmdLet Get-DiagInput qui permet de récupérer les entrées utilisateurs
· Une fois les scripts définis, on va compiler et tester notre assistant à l’aide de l’outil TSPDesigner.exe
Remarque :
En mode débogage de scripts (par opposition à un déploiement en production), il faut permettre au système d’exécuter des scripts non signés.
Pour ce faire on ouvre une session PowerShell en mode administrateur et on exécute les commandes suivantes :
set-executionPolicy RemoteSigned, puis le script PowerShell suivant :
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\TSPDesigner\TestModeSetup.ps1
· Exécution de l’assistant de résolution de problème
La compilation de l’assistant créé un répertoire \output, avec les scripts PowerShell associés, un fichier ayant pour extension .DIAGPKG et un fichier compressé de type cabinet .DIAGCAB
Il est alors possible pour lancer l’assistant de double-cliquer sur fichier .DIAGPKG ou .DIAGCAB, ou alors d’exécuter la commande Run de l’outil TSPDesigner.exe.
Mais une fois que votre assistant est mis au point, l’une des possibilités est de l’activer directement dans votre application.
· Dans notre exemple, nous avons une application WPF qui se connecte à une base de données.
Lors du chargement de l’application, si aucune connexion au serveur SQL n’est disponible, alors on invoque directement notre assistant de résolution de problème en utilisant le processus MSDT.EXE comme suit :
msdt /path <chemin d’accès au fichier ayant l’extension .diagpkg ou alors
msdt /cab <chemin d’accès au fichier ayant l’extension .diagcab>
· En cliquant sur Oui notre assistant démarre.
· Puis en cliquant sur Suivant, l’assistant détecte que le service SQL n’est pas démarré, et propose alors de résoudre automatiquement le problème
· En appliquant la correction, il est alors possible d’interagir (optionnel) avec l’utilisateur en lui proposant de charger de nouveau l’application directement à partir de l’assistant.
· En fin, l’assistant affiche un état de la résolution, c’est le vérificateur qui est alors exécuté.
Bien évidemment, il est possible d’enchainer dans un seul assistant, plusieurs recherche et résolution de problèmes.
Conclusion
L’assistant de résolution de problèmes dans Windows 7, n’est pas la fonctionnalité la plus en vue, mais elle permettra sans aucun doute si vous l’adopter, d’ajouter de la valeur à vos applications, en proposant à l’utilisateur, une démarche simple et efficace de résolution de problèmes courant.
Non seulement la perception de l’utilisateur changera, mais vous gagnerez également en temps et en efficacité.