¿Cómo puedo copiar un archivo como & # 8220; Usuario estándar & # 8221; en Vista (es decir, & # 8220; Una aplicación de elección administrativa & # 8221;) solicitando al usuario credenciales de administrador?

StackOverflow https://stackoverflow.com/questions/1039875

Pregunta

Tengo lo que las Guías de desarrollo de UAC se refieren como una "Aplicación de elección administrativa". Si está familiarizado con esto, pase a la siguiente sección.

Fondo:

Quiero dejar un " Estándar " el usuario tiene la capacidad de seleccionar / deseleccionar una opción Ejecutar al inicio en las preferencias de mi aplicación.

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

Entonces, lo que me gustaría es para la solicitud de credencial de Control de cuentas de usuario " aparecer y de esa manera si el usuario tiene una cuenta de administrador también puede poner las credenciales. Aparentemente, así es como se supone que las aplicaciones están diseñadas 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:

Una aplicación de elección administrativa

Un proceso elevado u objeto COM

La aplicación inicial se inicia sin necesidad de elevación. Los 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 función 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 usando ShellExecute () para realizar la tarea administrativa. Este segundo programa se marcaría con un nivel de ejecución solicitado de requireAdministrator, lo que provocaría la aprobación del usuario. Este segundo programa se ejecutará con un token de acceso administrativo completo y podrá realizar la tarea deseada. -O BIEN
  • La aplicación inicia un objeto COM usando CreateElevatedComObject (). Esta API lanzaría el objeto COM con un token de acceso administrativo completo después 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 sobre 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 e idealmente también explicar cómo decorar un elemento de menú con el "decorador sheild".

Notas:

He mirado la demostración de UAC proporcionada por microsoft que se hace referencia en varias publicaciones de StackOverflow como ( Solicite la elevación de Windows Vista UAC si la ruta está protegido? ) sobre temas relacionados con los permisos. El código solo tiene un ejemplo de la llamada a un proceso separado.

¿Fue útil?

Solución 2

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

Cuando se inició la aplicación, comprobaría la existencia de arg [0] .equals (" startup ") y luego comprobaría 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 alcance del usuario para que cada usuario pueda cambiar sin afectar a los demás.

Otros consejos

Aunque todavía parece involucrar al menos reiniciar o generar un proceso, puede encontrar ayuda aquí: UAC Shield for Elevation en CodeProject .com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top