studio programacion móviles desarrollo curso aplicaciones c++ winapi 64bit registry

c++ - programacion - ¿Cómo iniciar un proceso de Windows como de 64 bits a partir del código de 32 bits?



manual de programacion android pdf (4)

Para mostrar el cuadro de diálogo de UAC en Vista al escribir en la sección de registro de HKLM, optamos por no utilizar la API de registro de Win32, ya que cuando faltan permisos de Vista, tendríamos que volver a ejecutar toda nuestra aplicación con derechos de administrador. En cambio, hacemos este truco:

ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "//Reg", "add HKLM//Software//Company//KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);

Esta solución funciona bien, además de que nuestra aplicación es de 32 bits y ejecuta el comando REG.EXE ya que sería una aplicación de 32 bits que usaría la capa de compatibilidad WOW. :( Si REG.EXE se ejecuta desde la línea de comandos, se ejecuta correctamente en el modo de 64 bits. Esto importa, porque si se ejecuta como una aplicación de 32 bits, las claves de registro terminarán en el lugar equivocado debido a la reflexión del registro .

Entonces, ¿hay alguna manera de ejecutar una aplicación de 64 bits programáticamente desde una aplicación de 32 bits y no ejecutarla utilizando el subsistema WOW64 como su proceso principal de 32 bits (es decir, un sufijo "*" en el Administrador de tareas)?


¿Ha considerado crear una pequeña aplicación de "ayuda" para hacer que la actualización de registro para usted? Si lo compila en 64 bits e incluye un manifiesto que indica que requiere derechos de administrador, cubrirá ambas bases por usted.

Existen API para detectar el "bitness" del sistema operativo en el que se está ejecutando, por lo que podría, posiblemente, compilar RegistryUpdate32.exe y RegistryUpdate64.exe y llamar al correspondiente.


Si se ejecuta un programa nativo de 32 bits o de 64 bits (no administrado) depende únicamente del ejecutable. Hay dos copias de reg.exe , en C: / Windows / System32 (64 bits) y C: / Windows / SysWOW64 (32 bits). Como no especifica una ruta, obtiene lo que aparece primero en la PATH entorno PATH , que es la versión de 32 bits para un proceso de 32 bits.

Realmente debe factorizar esta función en un programa separado o un objeto COM, y marcar el programa con un manifiesto, o iniciar el objeto COM utilizando el moniker de elevación COM .


prueba esto (de un proceso de 32 bits):

> %WINDIR%/sysnative/reg.exe query ...

(encontrado que aquí ).