2012-03-19 13 views
5

Tengo una aplicación de 32 bits y un instalador de 32 bits, escrito en Wise Installation Studio. ... No debería usar Wise y debería cambiar a otra cosa. Pero por ahora, estoy atascado con eso.Escribiendo al registro de 64 bits desde el instalador de 32 bits

Nuestra aplicación es intensiva en gráficos y para mejorar el rendimiento, queremos que deshabilite la composición de escritorio (Windows Aero) mientras se ejecuta. Hemos logrado esto en sistemas de 32 bits mediante la adición de una entrada de registro en:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 

con un valor de DISABLEDWM.

Esto establece la casilla de verificación "Deshabilitar la composición del escritorio" en la pestaña de compatibilidad de las propiedades para que nuestro EXE se compruebe de manera predeterminada.

Esto funciona perfectamente en sistemas de 32 bits, pero cuando se ejecuta el instalador en un sistema de 64 bits, Windows redirige la creación de entradas de registro a HKLM\SOFTWARE\Wow6432Node, y la bandera no está configurada correctamente. Si creo manualmente una entrada en la vista de registro de 64 bits, entonces funciona.

Entonces, ¿cómo puedo forzar que esta clave de registro se cree en la vista de registro de 64 bits de nuestro instalador de 32 bits? ¿O hay una mejor manera de establecer esta propiedad aparte de crear una entrada de registro?

+1

¿Ese tipo de proyecto inteligente es un instalador MSI? –

+0

@ChristopherPainter: No lo creo (no estoy seguro de cómo comprobarlo). Pero el instalador resultante tiene una extensión ** .exe ** (no .msi). ¿Alguna idea de dónde buscar eso en Wise Installation Studio? – Travesty3

Respuesta

4

No estoy seguro de las posibilidades que Wise le ofrece con respecto a las secuencias de comandos, pero la forma de acceder al registro de 64 bits desde un programa regular es usar KEY_WOW64_64KEY al manipular el registro.

Si es posible ejecutar al menos un archivo EXE externo desde la configuración, debería resolver su problema.

+0

Gracias. Parece que esto es lo que tendremos que hacer, al menos hasta que pueda convencer a todos los demás de que vale la pena invertir más tiempo migrando a un nuevo instalador. – Travesty3

0

También uso Wise y debo admitir ventanas de 32 y 64 bits. He tenido cierto éxito al utilizar los archivos por lotes para llamar a reg.exe para eliminar y consultar entradas de registro de 64 bits. Debería poder emplear la misma técnica para agregar y modificar el registro. Busco "archivos de programa (x86) para determinar si se trata de ventanas de 64 bits. De lo contrario, utilizo los controles del registro nativo en forma inteligente, de lo contrario, utilizo los archivos por lotes con los parámetros pasados. Reg.exe debería estar en su camino . ir a un aviso del DOS y el tipo reg/para obtener la sintaxis

tengo un regtest.bat, que contiene lo siguiente:?. reg.exe consulta% 1/v% 2> 3%

El primer parámetro es la clave de registro, el segundo es el valor y el tercero es el archivo de texto en el que está escrito.

Mi regdelete.bat contiene: reg.exe delete% 1/f El param es la entrada de registro que quiere borrar.

0

El problema persiste aunque registro de consulta con Reg.exe Porque cuando el archivo bat es llamado por Wise, la consulta reg no puede encontrar la clave de 64 bits (solo se puede encontrar la clave de 32 bits).

3

No estoy seguro de si esta solución era posible en el momento en que se hizo esta pregunta, pero se puede crear una acción personalizada que ejecuta un comando REG ADD e incluya el modificador /reg:64, así:

REG ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data" /reg:64 

El El interruptor /reg:64 lo forzará al registro de 64 bits. No estoy del todo seguro de lo que esto hará en un sistema de 32 bits, pero espero que sea ignorado.

+0

Esta es la forma correcta de hacerlo. La respuesta aceptada es válida para las llamadas API, pero en este caso, cuando se usa REG para agregar/eliminar una clave, el/reg: 64 hará el truco. –

Cuestiones relacionadas