2010-11-23 19 views
5

Tengo una aplicación que es un iniciador para otra aplicación (la principal). El iniciador va a un servidor FTP, descarga actualizaciones y las instala. Sin embargo, el archivo ejecutable de la actualización debe copiar algunas DLL y EXEs en el directorio de instalación de la aplicación principal, que se encuentra en Archivos de programa. Debido a eso, actualmente necesito elevar los derechos del actualizador.Necesito elevar permisos sin ventanas emergentes UAC

Esto es un problema porque mi aplicación se inicia en el arranque, y en general simplemente se carga a la bandeja del sistema (la aplicación es comparable al mensajero/Skype). Si comienzo a mostrar advertencias de UAC en la pantalla mientras intento actualizar "silenciosamente" la aplicación, ya no es tan silenciosa.

La única manera que veo en este momento para evitar el problema es dar a todos los usuarios permisos para el directorio de instalación de archivos de programa, pero me resisto a hacer eso. ¿Alguna otra idea?

Estoy usando Windows 7 y las aplicaciones están en C#.

+3

utilizar una tarea programada, puede ejecutar con una cuenta de administrador. El puente es que se necesita una cuenta elevada para crearlos. –

Respuesta

10

Hacerlo violaría el principio básico de Control de acceso de usuario.

No hay forma de elevar los permisos mientras se evitan las indicaciones, por diseño. Si hubiera una manera de hacer esto, UAC sería inútil.


Dicho esto, podría intentar diseñar el tema. En lugar de hacer que su programa sea una aplicación de inicio/bandeja de sistema, puede considerar hacer un servicio de Windows que realice la actualización. Esto podría ejecutarse como administrador en el inicio (en lugar de iniciar sesión), y ya se ejecutaría con permisos elevados.

Si necesita una aplicación de bandeja del sistema, que podría ser una aplicación independiente que "habla" con el servicio.

+0

Gracias. Creo que quedó claro por mi pregunta que estoy tratando de comer el pastel y dejarlo entero, ya que no quiero romper el UAC pero sí quiero actualizaciones silenciosas. Aunque me gusta mucho la solución de servicio. Debo ir por esa solución de hecho. –

2

El objetivo de UAC es que las aplicaciones no pueden hacer cambios privados sin la aprobación del usuario. En lugar de intentar actualizar automáticamente su aplicación, tal vez podría simplemente informarle al usuario que hay una actualización disponible, y esperar a que soliciten su actualización (momento en el que se espera la solicitud de UAC, ya que muchas aplicaciones se actualizan de esta manera).

0

Como otros han dicho que UAC es para prevenir este tipo de comportamiento, sin embargo, usted puede desactivar el UAC y luego habilitar la post instalación de UAC, ya que supongo que sus "usuarios" son locales para su negocio. Puede insertar esto en un archivo por lotes y ejecutarlo usando psexec, ya que creo que puede hacerlo de forma remota sin instalar nada en la máquina cliente.

Desactivar UAC

C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f 

Habilitar UAC

C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f 
Cuestiones relacionadas