¿Cómo puedo configurar el modo de compatibilidad para un ejecutable desde la línea de comandos?

21

¿Hay alguna manera de establecer la opción de compatibilidad con XP (clic derecho / propiedades / compatibilidad ... ese, sí :) a un ejecutable desde la línea de comandos?

O mejor aún, ¿hay alguna forma de establecer la compatibilidad con un directorio completo (ejecutables en el directorio), de modo que cada ejecutable que se compila / compila ya tenga ese "indicador"?

Torre
fuente
1
@CodyGray: porque estoy usando un viejo compilador IDE (de Win95); cambiar a uno nuevo provocaría algunos costos para los que no estamos preparados en este momento. Si lo construyo y lo inicio desde el IDE, todo se bloquea. Si pongo compatibilidad y lo inicio desde el explorador, funciona. Lo cual es lo suficientemente bueno para mí. Solo que no me gusta poner el indicador de compatibilidad cada vez después de la construcción. Por lo tanto la pregunta ... :)
Torre
1
@CodyGray - Bueno, podría contarte toda la historia, pero dudo que quepa en el cuadro de comentarios aquí (o tres de ellos), así que dejaré la pregunta abierta por un tiempo más ...
Rook
1
Ah, sabía que recordaba haber leído eso en un artículo. Finalmente lo encontré y publiqué una respuesta para la posteridad. :-) Siéntase libre de ignorar mis molestias, pero dudo seriamente que encuentre un enfoque alternativo.
Cody Gray

Respuestas:

29

No conozco herramientas que permitan establecer o cambiar los indicadores de compatibilidad de la aplicación.

Sin embargo, los indicadores de compatibilidad de la aplicación se almacenan en el registro (usuario o parte del sistema):

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

Por lo tanto, puede usar el editor de registro de línea de comandos estándar para crear la entrada requerida:

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

Para obtener más detalles sobre los indicadores disponibles, consulte la publicación del blog Ejecutar una aplicación como administrador o en modo de compatibilidad .

Robert
fuente
1
Hmm, esto podría funcionar (!) ... esa tercera línea "reg.exe ..." ... así que si lo configuro para cada exe que tengo en algún directorio, "permanecerá adjunto" a ese ejecutable incluso si se reconstruye?
Torre
2
El comportamiento normal de hacer clic con el botón derecho> Propiedades> Compatibilidad es establecer las teclas en HKCU, a menos que se presione el botón "Cambiar configuración para todos los usuarios". Luego se establece en HKLM para todos los usuarios y no se puede cambiar a través del cuadro de diálogo.
Mike Brown
11

La respuesta de Robert fue acertada. Para ampliarlo un poco y responder la pregunta del OP sobre cómo configurar el modo en masa ...

Si tiene una carpeta llena de archivos .exe para procesar, puede hacer esto:

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

Este ejemplo usa HKCU en lugar de HKLM; asegúrese de elegir el que realmente desea.

Para eliminar la configuración, con un mensaje de confirmación para cada uno:

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

Agregue /fal final si no desea que se le solicite confirmación.

(Si vota esta respuesta, ¡vote también por Robert's!)

Mike Brown
fuente