Tengo una respuesta/solución para esta pregunta.
En primer lugar, no estoy de acuerdo (respetuosamente) con el comentario de que el uso de AppCompatFlags no es una "forma adecuada de configurar la aplicación y el instalador". La modificación de esta sección del registro simplemente se refleja utilizando la GUI de Windows para cambiar el nivel de privilegio del ejecutable. Encuentro que este método es más fácil de implementar que agregar un archivo de manifiesto. Si el usuario quiere o necesita cambiar el nivel de privilegio para no ejecutar como administrador, puede hacerlo fácilmente con la GUI.
De todos modos, tuve el mismo problema de tratar de establecer el Nivel de privilegio del ejecutable en Ejecutar como administrador. Sabemos que podemos configurarlo con la GUI:
- Haga clic con el botón derecho en el acceso directo o.archivo EXE y seleccione Propiedades
- Haga clic en la pestaña Compatibilidad
- (En este punto se puede ajustar el nivel de privilegios sólo para usted o para todos los usuarios, prefiero hacerlo para todos los usuarios)
- Haga clic en el botón Cambiar configuración para todos los usuarios
- Se abre una nueva ventana de Propiedades con una pestaña titulada "Compatibilidad para todos los usuarios"
- Ver nivel de privilegio bajo "Ejecutar este programa como administrador", hacer clic en Aceptar un par de veces para guardar los cambios .
Cuando se guardan los cambios, se encuentra la configuración en el registro:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Cuando me puse la .exe
para funcionar como administrador utilizando la interfaz gráfica de usuario de esta manera, que siempre funciona.
Sin embargo, cada vez que trataba de cambiar el registro directamente sin pasar a través de la interfaz gráfica de usuario, el programa simplemente no va a ejecutar como administrador. El registro muestra que hice el cambio y cuando miro el Nivel de privilegio para el ejecutable, Ejecutar como administrador está marcado como activado.
He intentado varias maneras diferentes de hacer el .exe
ejecutar como administrador con sólo cambiar el registro:
- manual editado el registro con regedit
- importados los cambios de un archivo
.reg
- Se utiliza el herramienta de línea de comando reg.exe para cambiar el registro
- Se utilizó la herramienta Wise Script ahora desaparecida
- Usado AutoIT Scripting
Todos estos métodos hicieron lo mismo. Se modificó el registro y la GUI mostró que ese programa debe ejecutarse como administrador, pero el programa nunca se ejecuta como administrador.
La solución para este problema que encontré es seguir adelante y cambiar la clave HKCU
y la clave HKLM
con la configuración.
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Si cambia estas dos secciones del registro, entonces el .exe
se ejecutará como un administrador. Más importante aún, si un usuario diferente inicia sesión en la PC, el programa se ejecutará como administrador. Esto a pesar del cambio de registro que no se realiza la sección HKCU para el usuario posterior.
No sé lo que está pasando aquí, pero se está trabajando.
Gracias lextm. No sabía que se podría crear un archivo manifiesto para los archivos exe que no creé. O que tampoco tenían que estar incrustados. Gracias por los enlaces. – JimDel
@JimDel: todos esos enlaces parecen estar relacionados con la incorporación del manifiesto. ¿Dónde viste cómo lo haría "para los archivos ejecutables que no creé?" – Pete