web-dev-qa-db-fra.com

Comment définir le mode de compatibilité d'un exécutable à partir de la ligne de commande?

Existe-t-il un moyen de régler la compatibilité avec l'option XP (clic droit/propriétés/compatibilité ... celui-là, oui :) à un exécutable à partir de la ligne de commande?

Ou mieux encore, existe-t-il un moyen de définir la compatibilité avec un répertoire entier (les exécutables dans le répertoire), de sorte que chaque exécutable compilé/construit ait déjà cet "indicateur" dessus?

20
Rook

Je ne connais pas d'outil permettant de définir ou de modifier les indicateurs de compatibilité des applications.

Toutefois, les indicateurs de compatibilité des applications sont stockés dans le registre (utilisateur ou partie système):

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Par conséquent, vous pouvez utiliser l'éditeur de registre de ligne de commande standard pour créer l'entrée requise:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "WINXPSP3"

Pour plus de détails sur les indicateurs disponibles, voir l'article du blog Exécution d'une application en tant qu'administrateur ou en mode de compatibilité .

25
Robert
16
user285687

La réponse de Robert était parfaite. Pour en dire un peu plus long et répondre à la question du PO sur la configuration du mode en masse ...

Si vous avez un dossier contenant des fichiers .exe à traiter, vous pouvez le faire:

for %x in ("*.exe") do reg.exe Add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx" /d "WINXPSP3"

Cet exemple utilise HKCU au lieu de HKLM; assurez-vous de choisir celui que vous voulez vraiment.

Pour supprimer les paramètres, avec une invite de confirmation pour chacun:

for %x in ("*.exe") do reg.exe Delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx"

Ajoutez /f à la fin si vous ne souhaitez pas recevoir de confirmation.

(Si vous votez pour cette réponse, votez également pour celle de Robert!)

10
Mike Brown