Estaba revisando que no publicábamos nada desde Julio de 2017 y pues ya pasó algo de tiempo, podemos decir que afortunadamente hemos tenido un poco de trabajo que no nos ha permitido retomar este asunto de los posts.
Una Pequeña Introducción
Uno de nuestros proyectos más importantes dentro de Nivisix es el Sistema de Punto de Venta, puesto que de primera instancia lo vendemos a nuestros clientes y posteriormente nos solicitan personalizaciones del mismo de acuerdo a sus necesidades.
Y las liberaciones a veces se tornan un tanto complicadas por que en un inicio eran en sitio y posteriormente usando herramientas como Team Viewer y si en su momento compraban el servicio de implementación de VPN pues que mejor.
Lo anterior está muy bien, ¿pero porqué no hacer uso de lo que Microsoft desde hace algunos años nos ofrece y que puede solucionar este problema de actualización? Hablo específicamente del uso de ClickOnce como herramienta de liberación y actualización de aplicaciones.
Para quienes no conozcan esta herramienta, por acá les dejo un link: ClickOnce
La Problemática
Una vez que comenzamos a distribuir la aplicación y las actualizaciones por internet nos encontramos con un pequeño inconveniente: ClickOnce está definido para ejecutarse bajo una metodología de privilegios bajos, ya que se instala bajo el perfil del usuario que ha iniciado sesión y éste no tiene privilegios elevados, ni tiene la posibilidad de ejecutar la aplicación como administrador. Intenten y verán. Incluso en Windows 10 aparece la opción para poder ejecutarse como administrador, pero símplemente la aplicación no inicia.
Buscando Una Solución
Buscando por internet nos encontramos con varias alternativas, entre ellas la de crear un bat que pudieramos ejecutar como administrador que a su vez llamara a nuestra aplicación una vez que los privilegios habían sido elevados.
Otra fue la de validar que la aplicación haya iniciado como administrador y si no era el caso, volver a ejecutarla solicitando la elevación de permisos, todo esto usando código fuente.
Nuestro caso era sólo que para ciertas operaciones era necesaria la elevación de permisos y que no se ejecutan de manera recurrente por el usuario, así que decidimos escribir el código necesario para validar si la operación necesaria requería de elevación de permisos, si era el caso, reiniciamos la aplicación solicitando la elevación necesaria.
Solución Encontrada
Como de costumbre, veremos un video de la solución implementada.
Clase Utilitaria AdministratorPrivileges.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /// <summary> /// Clase utilitaria para elevación concensuada de permisos de administrador /// </summary> internal static class AdministratorPrivileges { #region Métodos /// <summary> /// Valida si el usuario es administradores, si no reinicia con solicitud de elevación de privilegios /// </summary> /// <returns>True si el usuario es administrador, false en caso contrario</returns> internal static bool EjecutarComoAdministrador() { try { WindowsIdentity wi = WindowsIdentity.GetCurrent(); WindowsPrincipal wp = new WindowsPrincipal(wi); if (wp.IsInRole(WindowsBuiltInRole.Administrator)) { return true; } else { ProcessStartInfo processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase); processInfo.UseShellExecute = true; processInfo.Verb = "runas"; Process.Start(processInfo); return false; } } catch { return false; } } #endregion } |
Descarga de Código Fuente
La descarga incluye la solución que presentamos en el video
Puedes descargar la versión Community de Visual Studio para que lleves a cabo
tus pruebas desde este link: VSCommunity2017
Comentarios
Publicar un comentario