J'ai un matériel spécifique que je voudrais désactiver et réactiver à chaque redémarrage de Windows. J'ai créé un script batch qui est censé faire cela, ainsi que l'exécution de mon programme par la suite:
cd %~dp0
devcon.exe disable "PCI\VEN_1002&DEV_687F"
timeout /t 3
devcon.exe enable "PCI\VEN_1002&DEV_687F"
runMyWindows.exe --totally-not-virus
Je ne sais pas si devcon.exe
est une application appropriée pour cela en premier lieu parce que je n'ai aucune expérience avec l'écriture de scripts Windows.
Cependant, j'ai remarqué que ces commandes ne font pas tout à fait le travail parce que mon runMyWindows.exe
le programme ne fonctionne pas comme il se doit jusqu'à ce que je me rende dans le Gestionnaire de périphériques Windows et que je désactive et réactive manuellement ce périphérique.
Je n'ai qu'un seul utilisateur sur cette machine qui est dans le groupe "Administrateur" et je n'exécute pas ce script d'une manière spéciale, sauf en double-cliquant sur .bat
fichier, ou en cas de redémarrage, il est exécuté à partir du dossier de démarrage (C:\Users\oxxo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
).
Existe-t-il un moyen de le faire correctement dans mon script de commandes qui devrait être exécuté automatiquement au démarrage de Windows?
En raison des "améliorations" de la sécurité dans Windows 10
et certainement depuis Windows Vista
et l'introduction de User Account Control
Je suppose que vous devrez Run as administrator
, pas seulement être membre du groupe Administrateurs.
Il faut généralement lire que Run as administrator
veux dire Run as the user with the account name Administrator
ne pas Run as any user who holds membership of the Administrators group
.
À Run as administrator
, faites un clic droit sur le fichier batch et sélectionnez Run as administrator
dans le menu contextuel.
Il existe également d'autres façons de fonctionner en tant qu'administrateur.
PowerShell
ou WSH
.Task Scheduler
et choisissez les déclencheurs et informations de compte appropriés, (éventuellement en utilisant le compte SYSTEM).De plus, vous devez vous assurer que DevCon.exe
est soit:
"%~dp0DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"
DevCon Disable "PCI\VEN_1002&DEV_687F*"
"C:\Tools\DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"
Dans tous les cas ci-dessus, veuillez noter l'astérisque qui manque dans vos exemples
La plupart des gens qui liront ce fil ne trouveront pas l'autre réponse très utile, car il s'agit principalement de savoir comment exécuter le script dans la question avec des privilèges d'administrateur. Je vais essayer de répondre aux questions implicites ici:
J'ai trouvé plus facile d'utiliser devcon.exe (6 Mo), comme dans la question:
set HARDWARE_ID="PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
devcon disable %HARDWARE_ID%
timeout /t 3
devcon enable %HARDWARE_ID%
devcon.exe
nécessite des privilèges d'administrateur.
devcon
?Cela fait partie de la boîte à outils de développement de pilotes Windows. Malheureusement, les ressources officielles vous demandent de télécharger un SDK 1 Go. J'ai pu contourner cela en suivant l'une des réponses ici: https://superuser.com/questions/1002950/quick-method-to-install-devcon-exe
Une fois que vous l'avez, assurez-vous que devcon.exe
est sur votre %PATH%
. J'ai mis le mien dans C:\Windows\System32\
.
Ouvrez une invite de commande avec des privilèges d'administrateur et effectuez devcon hwids *
, qui imprimera tous les appareils et leurs ID correspondants. Cela produira beaucoup de sortie. Utilisez la fonction de recherche des invites de commande pour trouver ce dont vous avez besoin. Voici la section qui m'intéressait:
PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61\4&6AB551C&0&00E1
Name: Intel(R) Wireless WiFi Link 4965AGN
Hardware IDs:
PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61
PCI\VEN_8086&DEV_4229&SUBSYS_11018086
PCI\VEN_8086&DEV_4229&CC_028000
PCI\VEN_8086&DEV_4229&CC_0280
Compatible IDs:
PCI\VEN_8086&DEV_4229&REV_61
PCI\VEN_8086&DEV_4229
PCI\VEN_8086&CC_028000
PCI\VEN_8086&CC_0280
PCI\VEN_8086
PCI\CC_028000
PCI\CC_0280
Choisissez un ID suffisamment spécifique et vérifiez si cela fonctionne en faisant:
devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
Si cela ne trouve qu'un seul appareil, et c'est celui que vous voulez, vous êtes bon. Notez que vous voudrez souvent échapper l'ID matériel avec des guillemets.
Dans mon cas, j'ai également dû exécuter ce script lorsque l'ordinateur a démarré après l'arrêt ou la mise en veille. J'ai donné les autorisations sensibles au script ci-dessus et utilisé le Planificateur de tâches pour l'exécuter à la connexion et au démarrage, dans sa terminologie: https://www.sevenforums.com/tutorials/67503-task-create-run-program- startup-log.html? ltr = T