L'icone "Retirer le périphérique en toute sécurité" présente dans la Zone de Notification sur la droite de la Barre des Tâches permet par un simple clic gauche de sélectionner un volume et de s'assurer ainsi qu'aucun programme n'utilise le volume avant son retrait.
Sur cette capture deux périphériques ont le même nom "UBUSB". Lequel faut-il cliquer ?
L'icone n'est pas toujours présente sur l'ordinateur sur lequel on travaille.
Un contournement consiste à Exécuter (WIN+R) la commande
control hotplug.dll qui fonctionne bien avec XP. Gag, elle a un
problème avec W7. Quand elle est
présente elle n'est pas toujours facile d'accès. Selon l'ordinateur sur lequel
on travaille la barre des tâche peut être masquée, cas courant sur les netbooks
à cause du petit écran. Elle peut se retrouver dans la partie masquée des icones
du systray. Sur XP elle est inefficace pour éjecter un disque dur USB dont la
fenêtre est restée ouverte :
Problème lors de l'éjection de Périphérique de stockage de masse USB.
Impossible d'arrêter le périphérique 'Volume générique' actuellement. Réessayez
de l'arrêter ultérieurement.
C'est arrangé sur WIN7. Plus besoin de fermer la fenêtre avant de cliquer sur l'icone. Si WIN7 affiche un message c'est qu'il y a vraiment un fichier ouvert sur le volume
Avec les clés USB on peut utiliser "Éjecter" du Menu Contextuel de l'explorateur de fichiers (WIN+E), mais on remarque que si la fenêtre se ferme bien, l'icône reste en place et le témoin situé sur la clé reste allumé ou se met à clignoter. Et, on ne sait pas pourquoi, "Éjecter" n'est pas disponible pour les disques dur USB.
Nous allons essayer de voir s'il est possible de faire autrement, en cliquant sur un exécutable présent sur la clé, et par conséquent toujours disponible, et sans problème d'identification du périphérique. On vérifiera que le témoin de la clé USB s'éteint. Pour les disques durs externes, le problème est abordé vers la fin de l'article.
Avantages d'un utilitaire d'éjection placé sur le volume amovible
Lancer une commande depuis le périphérique est une excellente façon, habituellement, de se débarrasser du problème de la lettre du volume. C'est une technique que j'ai beaucoup utilisée dans "Changer la lettre d'un lecteur amovible".
Rappel : les clés USB sont des instruments peu sûrs de stockage. Faites des copies.
- DEVEJECT
- EjectClef+.cmd
- SYNC
- SyncKey.cmd
- USB Disk Ejector
- EjectUSB
- Réactiver une clé USB éjectée Nouveau
- Autres articles en relation
- Liens
Ceux qui n'aiment pas les lignes de commandes et qui n'ont pas envie de se taper l'historique de mes différents essais devraient aller directement à EjectUSB.
L'utilitaire DEVEJECT permet de déconnecter en lignes de commandes les
périphériques USB.
Un batch sur une clé USB permet de la déconnecter d'un double-clic sans
faire appel à l'icône "Supprimer votre périphérique en toute sécurité" de la
Zone de Notification.
Sécurité : Si un fichier de la clé est en cours d'utilisation la commande
échoue. C'est du moins ce que j'ai observé, mais il semble que ce ne soit
pas toujours vrai.
Après avoir lu Raccourci pour déconnexion propre de clef usb télécharger DEVEJECT
Usage:
deveject -EjectDrive:<Drive>|-EjectName:<Name>|-EjectId:<DeviceId>
[-v] [-Debug]
Attention, les paramètres sont sensibles à la casse :
-Ejectdrive n'est pas reconnu, bien écrire : -EjectDrive
LETTRE DU VOLUME
deveject -EjectDrive:u: Ejecting 'Volume gÚnÚrique' [STORAGE\REMOVABLEMEDIA\7&21A9E55B&0&RM]...ok. 1 device(s) ejected. |
NOM du type de périphérique
deveject -EjectName:"Périphérique de stockage de masse USB" Ejecting 'PÚriphÚrique de stockage de masse USB' [USB\VID_FFAE&PID_C7BA\123456789ABCDEF]...ok. 1 device(s) ejected. |
On veut déconnecter la clé en cliquant sur un batch contenu sur celle-ci.
Il n'y a rien à installer sur l'ordinateur hôte.
Copier ces fichiers sur la clé:
deveject.exe
EjectClef.cmd
EjectClef.cmd copie deveject.exe dans le dossier temporaire %TEMP%.
Il crée un second fichier de commande nommé Deveject.cmd dans le
Temporaire.
Ensuite il change le répertoire, libérant ainsi la clé, pour
travailler dans %TEMP%.
Le fichier de commandes %TEMP%\Deveject.cmd est lancé et
déconnecte tous les périphériques de stockage de masse USB, puis nettoie le
Temporaire
copy deveject.exe %TEMP% echo DEVEJECT -EjectName:"P‚riph‚rique de stockage de masse USB">%TEMP%\DEVEJECT.CMD echo DEL %TEMP%\deveject.exe>>%TEMP%\DEVEJECT.CMD echo DEL %TEMP%\deveject.cmd>>%TEMP%\DEVEJECT.CMD CD /D %TEMP% DEVEJECT.CMD |
- Le paramètre /D de la commande CD force le changement de volume en même temps que le changement de répertoire.
- Utiliser EDIT.COM pour éditer EjectClef.cmd à cause des accents.
La fenêtre de la clé étant ouverte sur le bureau de l'ordinateur hôte, on clique sur
EjectClef.cmd
Si aucun fichier n'est en cours d'utilisation, la fenêtre se ferme et la clé
est déconnectée comme ceci :
deveject -EjectName:"Périphérique de stockage de masse USB" Ejecting 'PÚriphÚrique de stockage de masse USB' [USB\VID_FFAE&PID_C7BA\123456789ABCDEF]...ok. 1 device(s) ejected. |
Remarques :
Tant que la clé n'est pas physiquement déconnectée, le Gestionnaire de Périphériques
présente un point d'exclamation jaune devant "Périphérique de stockage de masse USB".
Lorsqu'on retire la clé, ce Périphérique disparaît dans le Gestionnaire.
On peut trouver gênant que tous les Périphériques de stockage de masse USB soient éjectés (seulement s'ils ne sont pas utilisés). Le batch suivant montre comment utiliser la variable %~D0 contenant la lettre du volume USB à éjecter :
:Copie de deveject.exe
sur le disque interne copy deveject.exe %TEMP% :Creation d'un batch sur le disque dur :la variable %~D0 contient la lettre du volume (par exemple U:) echo DEVEJECT -EjectDrive:%~D0 >%TEMP%\tmp.bat echo DEL %TEMP%\deveject.exe>>%TEMP%\tmp.bat echo DEL %TEMP%\deveject.cmd>>%TEMP%\tmp.bat CD /D %TEMP% TMP.BAT |
Par
Mark Russinovich
Paru le 01 novembre 2006
Sync permet de savoir si les données sont écrites sur le volume et non pas en
attente d'écriture.
Sync permet également de traiter les lecteurs amovibles avant déconnexion.
Sync nécessite des privilèges d'administrateur
pour s'exécuter.
Utilisation : sync [-r] [-e] [liste de lettres de lecteur]
-r Vide les lecteurs amovibles.
-e Éjecte les lecteurs amovibles.
Si des lecteurs spécifiques sont indiqués Sync vide uniquement ces lecteurs.
Exemples :
Voir cette
conversation.
Éjecter la clef U: avec la commande SYNC :
SYNC -R -E u Sync 2.2: Disk Flusher for Windows 9x/Me/NT/2K/XP Copyright (C) 1997-2004 Mark Russinovich Sysinternals - www.sysinternals.com Flushing: U |
Suite à cette commande, la fenêtre U: de la clé USB se ferme. Si un document était ouvert, la fenêtre ne se ferme pas, la clé n'est pas éjectée. Si on ne précise pas la lettre, SYNC essaie toutes les lettres, ce qui a pour effet ... d'ouvrir les tiroirs des lecteurs de CD :
SYNC -R -E Sync 2.2: Disk Flusher for Windows 9x/Me/NT/2K/XP Copyright (C) 1997-2004 Mark Russinovich Sysinternals - www.sysinternals.com Flushing: A C D E F G H J K O P T |
Le batch SyncKey.cmd est à copier sur la clé USB, ainsi que l'exécutable
SYNC.EXE.
Voici le contenu de SyncKey.cmd :
:Copie de sync.exe dans
le Temporaire du disque dur copy sync.exe %TEMP% :la variable %~D0 contient la lettre du volume (par exemple G:) :Creation d'un batch sur le disque dur echo SYNC.EXE -R -E %~D0 >%TEMP%\tmp.bat echo DEL %TEMP%\sync.exe>>%TEMP%\tmp.bat echo DEL %TEMP%\tmp.bat>>%TEMP%\tmp.bat :on quitte le volume pour se positionner dans %TEMP% CD /D %TEMP% :et on execute %TEMP\tmp.bat TMP.BAT |
Il reste à retirer physiquement la clé USB pour que la lettre du volume
n'apparaisse plus dans Poste de Travail et que l'icône "Retirer le
périphérique en toute sécurité" soit effacée du Systray.
Sync.exe nécessitant des privilèges Administrateur pour fonctionner, il perd beaucoup de son intérêt. Heureusement ce n'est pas le cas pour DevEject.exe vu plus haut, ni pour l'utilitaire suivant :
Cet utilitaire tout récent résout tous les inconvénients observés ci-dessus. Il fonctionne de plus en mode graphique, ce qui ravira beaucoup d'utilisateurs. Le code est inspiré de http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx
Copier USB_Disk_Eject.exe sur la clé USB et cliquer sur le fichier. Une petite fenêtre permet de choisir le volume USB à traiter. Sans autre complication, la clé est éjectée. Sa fenêtre se ferme, elle n'est plus dans Poste de Travail, et l'icône "Retirer le périphérique en toute sécurité" n'est plus dans le Systray. Il n'y a pas besoin d'être Administrateur.
Si on observe le dossier Temporaire (Exécuter>%TEMP%) on voit le programme se copier dans le Temporaire pour s'exécuter en libérant la clé, puis s'effacer.
Pour obtenir le même fonctionnement obtenu avec les batchs précédents, c'est-à-dire éjecter la clé en un seul double-clic depuis la clé sans avoir à préciser le lecteur à éjecter :
:Copie de
USB_Disk_Eject.exe dans le Temporaire du disque dur copy USB_Disk_Eject.exe %TEMP% :la variable %~D0 contient la lettre du volume (par exemple U:) :Creation d'un batch sur le disque interne echo USB_Disk_Eject.exe /REMOVELETTER %~D0 >%TEMP%\tmp.bat echo DEL %TEMP%\USB_Disk_Eject.exe>>%TEMP%\tmp.bat echo DEL %TEMP%\tmp.bat>>%TEMP%\tmp.bat :on quitte le volume pour se positionner dans %TEMP% CD /D %TEMP% :et on exécute %TEMP\tmp.bat TMP.BAT |
Copier USB-Disk-Eject.cmd et USB_Disk_Eject.exe sur la clé USB et cliquer sur le premier. la clé est éjectée, et sa fenêtre se ferme. On va voir que ce n'est pas le cas pour les disques externes, pour lesquels il faudra fermer la fenêtre avant.
On a vu plus haut que, contrairement aux clés USB, "Éjecter" n'était pas disponible dans le menu contextuel des disques externes.
Mauvaise nouvelle, aucune des astuces vues jusqu'ici ne fonctionne pour un disque dur externe, même si on a optimisé celui-ci pour une suppression rapide, et supprimé la surveillance du volume. Il faut que la fenêtre du disque soit fermée avant d'utiliser USB Disk Ejector, ce qui enlève un peu de son intérêt. Une prochaine version verra sans doute ce point s'améliorer.
Voici ce qu'on constate :
Après avoir cliqué sur USB Disk Eject.exe
Un double-clic comme indiqué donne le résultat suivant :
Ceci est dû au fait que la fenêtre du disque externe est ouverte.
Si on copie USB_Disk_Eject.exe sur le Bureau par exemple et qu'on l'exécute en ayant pris la précaution de fermer la fenêtre de l'explorateur de fichiers montrant le contenu du volume externe, l'éjection est effective. Suite à l'éjection, le message devient :
La cause est que le programme actualise l'affichage des lecteurs connectés. Comme c'était le seul, il n'y en a plus.
On obtient ce panel en tapant la commande USB_Disk_Eject.exe /?
Le fichier à télécharger USBDiskEjector.zip contient l'exécutable et le fichier d'aide USB Disk Ejector.html
Pour résoudre le problème posé par les disques, ce script AutoHotkey permet d'envoyer la combinaison ALT+F4 à la fenêtre active (celle qui montre le contenu du disque externe qui contient le script sur lequel on clique). La fenêtre se ferme. La commande suivante provoque l'éjection du disque USB avec l'utilisation du commutateur /REMOVETHIS :
Send !{F4} Run USB_Disk_Eject.exe /REMOVETHIS |
Comme tout le monde n'a pas installé AutoHotkey, voici le script compilé :
Copier USB_Disk_Eject.exe et USB-Disk-Eject+.exe à la racine des disques et des clés USB. Cliquer sur USB-Disk-Eject+.exe pour éjecter rapidement le volume. Ce script fonctionne également (chez moi) pour les clés USB. Ça fait très bon ménage avec Change Volume Drive Letter, c'est très pratique.
Ce script VBS fait la même chose
Set Shell =
WScript.CreateObject("WScript.Shell") shell.run "USB_Disk_Eject.exe /REMOVETHIS" Shell.Popup "Si message d'erreur, ne pas débrancher."&VBCRLF&_ "L'icône du Systray devrait disparaitre"&VBCRLF&_ "si pas d'autre volume connecté. Cliquer dessus pour confirmer.", 3 'fermer la fenêtre en envoyant ALT+Espace+f Shell.SendKeys "(% )f" |
L'outil parfait est arrivé. Copier EjectUSB sur la clé. Exécuter EjectUSB. La clé est flushée et éjectée.
Logiciels anglais : Outils système : Divers
http://www.gratilog.net/xoops/modules/mydownloads/viewcat.php?cid=221
http://www.gratilog.net/xoops/modules/mydownloads/singlefile.php?lid=1763
Site de l'auteur
http://www.pocketappreview.com - commentaires -
http://www.pocketappreview.com/main/media//software_zip/EjectUSB.zip
Code Source (Autoit3) :
http://www.pocketappreview.com/main/item/ejectusb
http://www.pocketappreview.com/main/media//software_zip/EjectUSB_src.zip
Le début du script résume ses possibilités :
# EJECTUSB.AU3
#
# AI3 Script - EjectUSB - version 1.6
#
# Designed to be a simple utility to close all programs running from a specified drive or
# folder and then attempt ejection if a drive was specified. Extended functionality
# includes closing Explorer windows and removing registry entries and Recent Document
# shortcuts referencing the specified drive or folder.
#
# Prepared by William Hedrick
Décompresser EjectUSB.exe sur la clé USB. Exécuter EjectUSB. La clé est
éjectée.
Simple en utilisation standard, l'utilitaire peut faire face à des situations
complexes, lire attentivement EjectUSB.txt
EjectUSB peut être utilisé seul ou en lignes de commandes, affiné avec un
fichier ejectusb.ini, et enfin, cerise sur le gâteau, en corrélation avec
d'autres logiciels comme Unlocker, Sync, et même USB_Disk_Eject.exe vu
ci-dessus. L'outil vise donc à très facile d'utilisation, tout
en permettant d'autres scénarios plus complexes. On peut par exemple demander
l'arrêt d'un programme, et indiquer diverses préférences. Il devrait ainsi
s'adapter à tous
les besoins.
Exemple d'utilisation
Outre l'utilitaire EjectUSB.exe le zip contient les fichiers suivants
Panneau d'aide à la
configuration![]() |
Ejectusb en lignes de commandes La commande ejectusb supporte 6 arguments séparés par des espaces : Rappel : mettre des guillemets dans un chemin comprenant des espaces. Toutes ces façons de désigner un lecteur sont acceptées : On peut désigner un dossier : y:\dossier1\dossier2 Commutateurs
Exclusions et inclusions : svp lire ejectusb.txt |
EjectUSB peut être renommé sans causer de dysfonctionnement. Par
exemple zzejectusb.exe ou _ejectusb.exe seront faciles à trouver.
L'utilisation accidentelle dans un dossier du disque dur au lieu d'une clé USB
n'a pas d'autre conséquence que la fermeture du dossier.
EjectUSB fonctionne tout aussi bien avec une clé USB formatée NTFS malgré les
particularités de ce format (surveillance disque).
EjectUSB fonctionne avec un disque externe USB; il ferme la fenêtre, ce qui
libère le disque et permet son éjection.
Si le disque a plusieurs partitions,
il faut être patient, c'est un peu long pour obtenir "Vous pouvez retirer ..."
Batch pour ne pas faire les opérations de nettoyage, seulement
éjecter le volume amovible (très rapide) :
Créer un fichier texte avec cette
commande et le nommer "eject.cmd"
ejectusb /eject
"Windows ne trouve pas 'EjectUSB.exe'. Vérifiez que vous
avez entré le nom correct, puis réessayez."
On clique sur [OK]
et le périphérique est quand même éjecté.
Contournement : |
http://fspsa.free.fr/lettre-lecteur-amovible.htm#reactiver-une-clef-usb-ejectee
http://fspsa.free.fr/lettre-lecteur-amovible.htm#removedrive-et-restartsrdev
Pour des raisons d'accessibilité il peut être souhaité de pouvoir réafficher par programme un volume USB alors qu'on l'a "éjecté" par erreur. RemoveDrive a pour avantage de préparer le volume à cette éventualité.
Comme la question a été traitée par l'auteur de USBDLM, elle est abordée dans l'article Changer la Lettre d'un Lecteur Amovible, à la suite des présentations de USBDLM et ListUsbDrives ==> Réactiver une clé USB éjectée.
Changer la Lettre
d'un Lecteur Amovible
Réactiver une clé USB éjectée
Contamination par les lecteurs amovibles
Tutoriel de Batch par MC
http://fspsa.free.fr/vbscripting.htm
http://www.raymond.cc/blog/archives/2008/03/01/how-to-fix-problem-ejecting-usb-mass-storage-device-error
http://www.raymond.cc/blog/archives/2008/03/01/how-to-fix-problem-ejecting-usb-mass-storage-device-error/fr
Merci d'avoir lu jusqu'ici !
Retour au début
Les restes du site
JF
(Jean-François)
Créée le 5/05/2006