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

21

Existe-t-il un moyen de définir la compatibilité avec l'option XP (clic droit / propriétés / compatibilité ... celle-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 (exécutables dans le répertoire), de sorte que chaque exécutable qui est compilé / construit ait déjà ce "drapeau" dessus?

Tour
la source
1
@CodyGray - Parce que j'utilise un ancien compilateur IDE (de Win95); le passage à un nouveau entraînerait des coûts auxquels nous ne sommes pas prêts pour le moment. Si je le construis et le démarre à partir de l'IDE, tout se bloque. Si je mets la compabilité et la démarre depuis l'explorateur, ça marche. Ce qui est assez bon pour moi. Seulement, je n'aime pas mettre le drapeau de compatibilité à chaque fois après la construction. Par conséquent, la question ... :)
Tour
1
@CodyGray - Eh bien, je pourrais vous donner toute l'histoire, mais je doute que cela tienne dans la case des commentaires ici (ou trois d'entre eux), alors je vais laisser la question ouverte encore un peu plus longtemps
Rook
1
Ah, je savais que je me souvenais l'avoir lu dans un article. Je l'ai finalement trouvé et j'ai posté une réponse pour la postérité. :-) N'hésitez pas à ignorer ma lancinante, mais je doute sérieusement que vous trouverez une approche alternative.
Cody Gray

Réponses:

29

Je ne connais pas d'outils qui permettent de définir ou de modifier les indicateurs de compatibilité des applications.

Cependant les drapeaux de compatibilité des applications sont stockés dans le registre (partie utilisateur ou 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, consultez l'article de blog Exécution d'une application en tant qu'administrateur ou en mode de compatibilité .

Robert
la source
1
Hmm, cela pourrait (!) Fonctionner ... cette troisième ligne "reg.exe ..." ... donc si je la mets pour chaque exe que j'ai dans un répertoire, elle "restera attachée" à cet exécutable même s'il est reconstruit?
Tour
2
Le comportement normal du clic droit> Propriétés> Compatibilité consiste à définir les clés sous HKCU, sauf si le bouton "Modifier les paramètres pour tous les utilisateurs" est enfoncé. Ensuite, il est défini sous HKLM pour tous les utilisateurs et ne peut pas être modifié via la boîte de dialogue.
Mike Brown
11

La réponse de Robert était parfaite. Pour développer un peu plus, et répondre à la question de l'OP sur le réglage du mode en masse ...

Si vous avez un dossier plein de 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 d'eux:

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 être invité à confirmer.

(Si vous votez pour cette réponse, veuillez également voter pour Robert!)

Mike Brown
la source