delphi - Elevando permisos bajo Windows 7
windows-7 elevated-privileges (3)
Tengo un mecanismo de "actualización automática" que ha estado funcionando durante muchos años en Windows XP y que falla en Windows 7 porque el aviso al usuario (que nunca existió en Windows XP) para otorgar permiso al programa para ejecutarse con derechos de administrador no aparece.
El programa win32 (escrito en Borland Delphi) utiliza LogonUser () e ImpersonateLoggedOnUser () para suplantar a un usuario (cuenta local con derechos de administrador) para que pueda reemplazar los archivos seleccionados en la carpeta Archivos de programa.
Si inicio sesión manualmente en Windows 7 utilizando esta cuenta de usuario y luego intento eliminar un archivo en la carpeta Archivos de programa, Windows 7 solicita mi permiso para permitir que el programa continúe; si le doy permiso, el archivo se elimina, si niego mi permiso. se informa de ''acceso denegado'' y la eliminación no está permitida.
Al intentar hacer lo mismo que se describe arriba, "acceso denegado" es el resultado sin que se solicite nada al usuario.
Veo en una pregunta similar herabouts (con respecto a la creación de archivos temporales (donde el empuje principal de las respuestas dadas es bastante correcto ''no hacerlo'') que tal mensaje puede ser elevado ''en código'' pero no puedo ver dónde ese método es realmente explicado.
Solo necesita marcar su actualizador automático como que requiere privilegios elevados en el manifiesto de su aplicación .
Dicho esto, es posible que desee considerar la instalación en algún lugar que el usuario tenga privilegios de escritura.
Bueno, han pasado dos años, mis clientes finalmente están adoptando Windows 7 y finalmente he eludido el problema que estaba tratando de resolver (obteniendo temporalmente los derechos suficientes para reemplazar archivos ejecutables en Archivos de programa bajo Windows 7) al reemplazar mi propio instalador con un instalador Inno Setup (que incorpora una lógica adicional transferida desde mi instalador usando Pascal Scripting). Inno Set maneja todos los problemas de permisos: ¡hurra!
En parte pareces estar preguntando cómo ejecutar el código elevado. Hay un par de respuestas a la siguiente pregunta que proporcionan enlaces a la información que necesita para invocar la funcionalidad que se ejecuta elevada: