2009-06-24 9 views
5

Tengo lo que las Guías de desarrollo de UAC denominan una "Solicitud de elección administrativa". Si está familiarizado con esto, salte a la siguiente sección.¿Cómo puedo copiar un archivo como "Usuario estándar" en Vista (es decir, "Una aplicación de elección administrativa") pidiendo al usuario las credenciales de administrador?

Antecedentes:

Quiero que un usuario "estándar" tienen la capacidad de seleccionar/anular la selección de una corrida en la opción de inicio en las preferencias de mi solicitud.

Como mi aplicación es por máquina (no por usuario), lo que debe suceder es que necesite Eliminar o Copiar un acceso directo al Menú de Inicio/Programas/carpeta de Inicio que requerirá acceso administrativo para realizar esta operación .

Entonces, lo que me gustaría es que aparezca el mensaje de "Credencial de control de cuentas de usuario" y, si el usuario tiene una cuenta de administrador, también pueden ingresar las credenciales. Al parecer, así se supone que las aplicaciones deben diseñarse para evitar que el usuario tenga que cambiar a otra cuenta cada vez que necesite hacer algo administrativo.

Extracto de la documentación de MSDN:

Un Administrativa Solicitud de Selección

Proceso Una elevada o de objetos COM

La aplicación inicial pone en marcha sin necesidad de elevación. Esos elementos en la interfaz de usuario que requerirían un token de acceso administrativo están decorados con un icono de escudo como identificación. Esta decoración indica al usuario que usar esa característica requerirá la aprobación del administrador. Cuando la aplicación detecta que uno de estos botones ha sido seleccionado, tiene las siguientes dos opciones.

  • La aplicación inicia un segundo programa utilizando ShellExecute() para realizar la tarea administrativa. Este segundo programa se marcará con un nivel de ejecución requerido de requireAdministrator, lo que provocará que se solicite la aprobación del usuario. Este segundo programa se estaría ejecutando con un token de acceso administrativo completo y podría realizar la tarea deseada. -O-
  • La aplicación inicia un objeto COM utilizando CreateElevatedComObject(). Esta API lanzaría el objeto COM con un token de acceso administrativo completo luego de la aprobación y este objeto COM podría realizar la tarea deseada.

Solo necesito copiar un archivo ... parece excesivo bifurcar un nuevo proceso usando ShellExecute() y no sé lo suficiente acerca de COM para saber si podría usarlo para copiar un archivo. Espero que alguien pueda publicar algún código que proporcione una forma de copiar el archivo y, de manera ideal, también explicar cómo decorar un MenuItem con el "decorador de elementos decorativos".

Notas:

He mirado en la UAC Demo provided by microsoft que se hace referencia en varios puestos StackOverflow tales como (Request Windows Vista UAC elevation if path is protected?) sobre temas relacionados con los permisos. El código solo tiene un ejemplo de la llamada a un proceso separado.

Respuesta

2

Terminé yendo en una dirección diferente.Hice que mi instalador creara un atajo de inicio en la carpeta Todos los usuarios/Inicio que pasa un argumento a la aplicación "inicio".

Cuando se inició la aplicación, comprobaba la existencia del argumento arg [0] .equals ("inicio") y luego verificaba si Settings1.Default.RunOnStartup == true.

Si ambas condiciones fueran ciertas, saldría de la aplicación inmediatamente. Cuando la aplicación se inicia sin ese argumento (es decir, el Grupo de programas del menú Inicio), la aplicación se carga normalmente.

La configuración RunOnStartup es una configuración de ámbito de usuario para que cada usuario pueda cambiar sin afectar a los demás.

2

Aunque todavía parece implicar al menos reiniciar o lanzando un proceso, se puede encontrar un poco de ayuda aquí: UAC Shield for Elevation en CodeProject.com

+0

Es un comienzo. ¡Gracias! – blak3r

Cuestiones relacionadas