Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Hechelion en 21 de Abril de 2011, 09:02:46 PM

Título: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 21 de Abril de 2011, 09:02:46 PM
Como dice el titulo.
Tengo un programa que se encarga de actualizar el contenido de un juego, baja los archivos y los descomprime para que el jugador tenga el mismo contenido que el servidor.

El problema, es que algunos jugadores instalan el juego sobre "Program file" y usan win7 y como bien me explicó vicente en otro post, nos quedamos sin permisos de escritura y el updater no funciona. La solución anterior era decirles a esos jugadores que corrieran el updater con permisos de administrador. El tema, es que justo ahora estoy trabajando en la aplicación para implementarle algunos cambios y me gustaría resolver ese problema. Sé que debe existir alguna solución, porque otros juegos como "guild war", que también usan updater, son capaces de escribir en sus propios directorios sin que el usuario haya realizado cambios previos, pero no he encontrado nada en la red.

Supongo, que el truco estará en pasar el updater por un "instalador".

Por ultimo, He visto que algunos juegos, cuando se instalan en win7, agregan un acceso directo a "juegos" (Pero no lo hacen bajo XP), así que no crea que sea simplemente cosa de agregar un acceso directo por parte de la aplicación, me da la idea que es el propio OS el que determina que la aplicación es un juego y agrega el acceso. ¿ sabéis algo al respecto o el sándwich que me comí estaba pasado?

Datos:
El updater está programado con VB6, es una aplicación que hice hace años, cuando el 100% de la gente que jugaba usaba winXP, pero que funciona de 10 hasta el día de hoy.
La parte del updater, descarga el contenido vía HTTP a una carpeta temporal y luego usa el 7zip para descomprimir el contenido de los temporales al directorio final.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 21 de Abril de 2011, 09:44:36 PM
La solucion correcta es poner esos archivos que necesitan ser actualizados fuera de Program Files, idealmente en AppData, que para eso esta. Eso o que corra en modo administrador, pero no hay mas soluciones o trucos (que yo sepa, y si los hay son una chapuza nada recomendable en serio).

Sobre agregarse a Juegos, es algo que decide el instalador, el SO no decide nada. Puede que el instalador decida que en XP no lo hace y en W7 si, ni idea, pero el SO desde luego que no.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 21 de Abril de 2011, 10:54:33 PM
Cita de: Vicente en 21 de Abril de 2011, 09:44:36 PM
La solucion correcta es poner esos archivos que necesitan ser actualizados fuera de Program Files, idealmente en AppData, que para eso esta. Eso o que corra en modo administrador, pero no hay mas soluciones o trucos (que yo sepa, y si los hay son una chapuza nada recomendable en serio).
Alguna forma tendra que haber cuando programas como Steam funcionan así. Que yo recuerde al menos Steam define su directorio de aplicaciones y descargas dentro de un subdirectorio en el propio directorio de la aplicación (Steam). Me suena muy raro que no se pueda escribir dentro de los propios dominios de la aplicación cuando muchas lo hacen en Vista y Se7en, no tiene sentido no poder hacerlo.

Cita de: Hechelion en 21 de Abril de 2011, 09:02:46 PM
Por ultimo, He visto que algunos juegos, cuando se instalan en win7, agregan un acceso directo a "juegos" (Pero no lo hacen bajo XP), así que no crea que sea simplemente cosa de agregar un acceso directo por parte de la aplicación, me da la idea que es el propio OS el que determina que la aplicación es un juego y agrega el acceso. ¿ sabéis algo al respecto o el sándwich que me comí estaba pasado?
Cita de: Vicente en 21 de Abril de 2011, 09:44:36 PM
Sobre agregarse a Juegos, es algo que decide el instalador, el SO no decide nada. Puede que el instalador decida que en XP no lo hace y en W7 si, ni idea, pero el SO desde luego que no.
Eso de agregar accesos directos al directorio Juegos/Games en Windows 7 es una funcionalidad nueva que añadieron con Vista. No se exactamente los pasos completos para ello pero si se que había que definir un archivo de definición del juego mediante una utilidad que trae el SDK de DirectX, el "Game Definition File Editor". Para mas información busca en Google sobre "Game Explorer Folder".

Salu2...
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 21 de Abril de 2011, 11:10:16 PM
Cita de: [EX3] en 21 de Abril de 2011, 10:54:33 PM
Alguna forma tendra que haber cuando programas como Steam funcionan así. Que yo recuerde al menos Steam define su directorio de aplicaciones y descargas dentro de un subdirectorio en el propio directorio de la aplicación (Steam). Me suena muy raro que no se pueda escribir dentro de los propios dominios de la aplicación cuando muchas lo hacen en Vista y Se7en, no tiene sentido no poder hacerlo.

Ejecutara con permisos elevados entonces.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 21 de Abril de 2011, 11:19:52 PM
Cita de: Vicente en 21 de Abril de 2011, 11:10:16 PM
Ejecutara con permisos elevados entonces.
Yo cuando la he instalado desde una cuenta de usuario no me ha pedido autenticarme como Administrador asi que lo dudo (se supone que para ello deberia pedirte credenciales en la instalacion o en la ejecucion del programa, no?).

Salu2...
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 12:28:50 AM
Algo hacen seguro para elevar privilegios. Leyendo la MSDN no encuentro mucho excepto algunas cosas utilizando un manifiesto.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 01:03:57 AM
Ya he descubierto la chapuza que hace Steam: al instalar, da permisos de escritura a cualquier usuario del SO en su propia carpeta. Sin comentarios  Oo
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 22 de Abril de 2011, 01:08:48 AM
Cita de: [EX3] en 21 de Abril de 2011, 11:19:52 PM
Cita de: Vicente en 21 de Abril de 2011, 11:10:16 PM
Ejecutara con permisos elevados entonces.
Yo cuando la he instalado desde una cuenta de usuario no me ha pedido autenticarme como Administrador asi que lo dudo (se supone que para ello deberia pedirte credenciales en la instalacion o en la ejecucion del programa, no?).

Salu2...

Exactamente, hay varias aplicaciones que hacen eso y no piden privilegios, por eso preguntaba y no me sirve pasar los archivos a otra carpeta porque no son archivos de configuración (como fue mi duda anterior), lo que hace el updater, es actualizar el juego, mejor dicho, lo que hace es actualizar el MOD que tiene la comunidad  para ese juego y el MOD debe estar cargado en subdirectorios específicos del juego (básicamente porque también modificamos los recursos, como texturas, etc). Así que no tengo control de donde se poner eso, o lo hago en el directorio de la aplicación o el MOD no va a correr, por muy correcto que se la otra alternativa, simplemente no me sirve..

Como decía, la solución actual, es que corran la aplicación con privilegios de admin, pero he visto muchos juegos que si pueden actualizar su contenido sin necesidad de elevar los privilegios ni de cambiar las propiedades manualmente del directorio donde se instaló. Así que quería ver si podía implementar lo mismo.


Cita de: Vicente en 21 de Abril de 2011, 09:44:36 PM
Sobre agregarse a Juegos, es algo que decide el instalador, el SO no decide nada. Puede que el instalador decida que en XP no lo hace y en W7 si, ni idea, pero el SO desde luego que no.

Es que me llama sobre manera la atención eso. No veo ningún objetivo a hacerlo bajo un OS y no bajo el otro, además algunos de esos juegos son antiguos, como el oblivión, de ahí que no me cuadre mucho que sea el juego el que decide.


Cita de: Vicente en 22 de Abril de 2011, 01:03:57 AM
Ya he descubierto la chapuza que hace Steam: al instalar, da permisos de escritura a cualquier usuario del SO en su propia carpeta. Sin comentarios  Oo

Había pensado en lo mismo como solución, ¿alguna forma de agregar el permiso mediante código y no mediante un tutorial en un foro que la mitad de los jugadores no van a leer?
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 01:29:50 AM
Y una pregunta, que problema tiene que el updater pida elevar privilegios? Es lo que deberia hacer vamos.

Otra solucion es que si el usuario tiene Steam, que escribas en la carpeta de Steam, total, hay puede escribir to dios :p (para que veas porque es una chapuza increible).

Para lo de la carpeta de juegos, yo cuando creo instaladores (utilizo Advanced Installer, es una maravilla), es una opcion que elijo en el instalador, por eso estoy seguro que no es algo del SO.

Y sobre lo de cambiar permisos por codigo, tienes que usar la clase FileSecurity.

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesecurity.aspx

Pero espero que no lo hagas :p
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 22 de Abril de 2011, 02:45:52 AM
Cita de: Hechelion en 22 de Abril de 2011, 01:08:48 AM
Es que me llama sobre manera la atención eso. No veo ningún objetivo a hacerlo bajo un OS y no bajo el otro, además algunos de esos juegos son antiguos, como el oblivión, de ahí que no me cuadre mucho que sea el juego el que decide.
Mirate lo que comentaba del Game Explorer Folder. Lo del GEF solo funciona a partir de Vista, en XP y anteriores es simplemente una carpeta con los accesos directos a juegos preinstalados del sistema. El sistema no decide nada, eso son especificaciones de la publicacion del juego.

Cita de: Vicente en 22 de Abril de 2011, 01:03:57 AM
Ya he descubierto la chapuza que hace Steam: al instalar, da permisos de escritura a cualquier usuario del SO en su propia carpeta. Sin comentarios  Oo
Bueno, teniendo en cuenta que se basan en un sistema diseñado para Windows 9x, 2000 y XP tiene logica que no fueran a reimplementar la forma de almacenamiento de los juegos y mods para Vista y Se7en, de hecho, no lo he mirado, pero visto como se trabaja en Mac OS X, estoy seguro que hacen lo mismo. Sigo sin ver logica a no permitir acceso de escritura al propio programa en sus dominios.

Salu2...
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 22 de Abril de 2011, 02:55:53 AM
Cita de: Vicente en 22 de Abril de 2011, 01:29:50 AM
Y una pregunta, que problema tiene que el updater pida elevar privilegios? Es lo que deberia hacer vamos.

Ninguna si lo pidiera, el tema es que no sé como hacer que la propia aplicación solicite elevar el privilegio (sería una solución valida también).
Así que el problema es que los usuarios se topan con un mensaje de error al actualizar y claro, luego en el foro hay que empezar a usar la taumaturgia para llegar a que era un error de permisos.



Sobre el GEF, le voy a dar una mirada, me parecía que debía ser alguna especificación, originalmente pensaba en alguna marca o algún registro que win7 interpretaba y que hacía que el OS agregara el acceso al directorio juegos.

Sobre la lógica, yo tampoco se la veo, en especial porque windows carece de buenas herramientas para trabajar con sistemas estrictos de permisos (Como Unix y Linux ya tienen resuelto hace años), pero por experiencia, debatir sobre la filosofía de vida de windows nos lleva a sacar lo peor de nuestro ser en el foro, en una pelea a muerte entre los vicentinos y hanssinos  :..

Edit: Por cierto, gracias por las respuestas Vicente y ex3
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 02:58:42 AM
AppData ya existia en Windows XP, y lo de no escribir en Archivos de Programa tambien (al menos como recomendacion, no se si se forzaba). Pero claro, en XP era administrador hasta la cuenta del perro.

Y no se permite por seguridad. Por ejemplo, en un entorno corporativo puede evitar que los usuarios actualicen aplicaciones si no quieren los administradores de sistemas. Y seguro que hay miles de ejemplos mucho mejores que ese :)
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 03:05:13 AM
Para que la aplicacion eleve privilegios, boton derecho, propiedades, compatibilidad, y donde pone "Ejecutar este programa como administrador" lo marcas. Asi cuando el usuario se la descargue ya esta marcada y listo. O si no, cuando ejecute que le de a boton derecho, "Ejecutar como administrador".

Tambien se puede hacer creo con un archivo de manifiesto.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

Pero las primeras son mucho mas faciles :p
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 22 de Abril de 2011, 03:21:01 AM
Cita de: Vicente en 22 de Abril de 2011, 03:05:13 AM
Para que la aplicacion eleve privilegios, boton derecho, propiedades, compatibilidad, y donde pone "Ejecutar este programa como administrador" lo marcas. Asi cuando el usuario se la descargue ya esta marcada y listo. O si no, cuando ejecute que le de a boton derecho, "Ejecutar como administrador".

Tambien se puede hacer creo con un archivo de manifiesto.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

Pero las primeras son mucho mas faciles :p

No tenía la menor idea que al distribuir un ejecutable, también se distribuían esas propiedades, voy a hacerlo así, ya que precisamente lo que busco es una solución automática.

Lo de botón derecho, es precisamente el problema, porque el jugador debe saber a "priori" que esa es la manera de ejecutar el programa, y la mayoría de los gamer son: instala, ejecuta y se va directo a postear cuando le sale el aviso de error, o peor aún, se salta la advertencia se pone a jugar y luego postea preguntando porque se le cae el juego en la mitad.

Lo del manifiesto, le voy a dar una leída, pero voy a tratar con la primera opción, como siempre, muy agradecido por las respuestas.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 22 de Abril de 2011, 03:22:05 AM
Cita de: Vicente en 22 de Abril de 2011, 02:58:42 AM
AppData ya existia en Windows XP, y lo de no escribir en Archivos de Programa tambien (al menos como recomendacion, no se si se forzaba). Pero claro, en XP era administrador hasta la cuenta del perro.
En XP se puede escribir en Program Files siendo o no admin, lo se de sobra por que nuestras aplicaciones en el banco tienen un updater al estilo de lo que quiere hacer Hechelion y funciona con cualquier cuenta que ejecute el programa. Sobre lo del AppData, como te decia antes, Steam estaba diseñado para funcionar en sistemas 9x y 2000, en estos no hay AppData (y que de todas maneras, por entonces lo tipico y logico era mantener todo dentro del directorio de la aplicacion).

Cita de: Vicente en 22 de Abril de 2011, 02:58:42 AM
Y no se permite por seguridad. Por ejemplo, en un entorno corporativo puede evitar que los usuarios actualicen aplicaciones si no quieren los administradores de sistemas. Y seguro que hay miles de ejemplos mucho mejores que ese :)
En eso estamos de acuerdo, en cierta medida es lo que hay montado en el banco con muchos recursos de red y directorios de sistema de cada maquina. Lo del manifiesto para elevar los privilegios del ejecutable tengo que echarle un vistazo, sabia que a partir de Vista se podían indicar privilegios para las aplicaciones que nada tuvieran que ver con las del usuario que las ejecuta, lo cual es necesario para tareas como las que mencionadas en el hilo.

Salu2...
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 03:30:42 AM
Cita de: [EX3] en 22 de Abril de 2011, 03:22:05 AM
En XP se puede escribir en Program Files siendo o no admin, lo se de sobra por que nuestras aplicaciones en el banco tienen un updater al estilo de lo que quiere hacer Hechelion y funciona con cualquier cuenta que ejecute el programa. Sobre lo del AppData, como te decia antes, Steam estaba diseñado para funcionar en sistemas 9x y 2000, en estos no hay AppData (y que de todas maneras, por entonces lo tipico y logico era mantener todo dentro del directorio de la aplicacion).

La documentacion ya decia que solo debian poder escribir instaladores, la cagada es que no lo forzaran. Y una carpeta de datos para aplicaciones ya existia en XP (Documents and Settings\username\Local Settings\Application Data) y en Windows 2k Server (%USERPROFILE%\Application Data), asi que me sorprende que no exista en W2k (en 9x ni idea).

Y ya por ultimo, Steam no soporta W2k y 9x :p
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 22 de Abril de 2011, 04:06:40 AM
Cita de: Vicente en 22 de Abril de 2011, 03:30:42 AM
Y ya por ultimo, Steam no soporta W2k y 9x :p
Ya no, antaño cuando salio si :P

Salu2...

P.D.: Por mucho que recomendara la documentacion entonces, hasta XP se han arrastrado muchas cagadas de versiones anteriores de Windows, de ahi ese cambio tan drastico que dieron con Vista con el tema de permisos.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 12:57:02 PM
Cita de: Hechelion en 22 de Abril de 2011, 03:21:01 AM
No tenía la menor idea que al distribuir un ejecutable, también se distribuían esas propiedades, voy a hacerlo así, ya que precisamente lo que busco es una solución automática.

Mmm, pues ahora me haces dudar, creo que si la verdad.

Cita de: Hechelion en 22 de Abril de 2011, 03:21:01 AM
Lo de botón derecho, es precisamente el problema, porque el jugador debe saber a "priori" que esa es la manera de ejecutar el programa, y la mayoría de los gamer son: instala, ejecuta y se va directo a postear cuando le sale el aviso de error, o peor aún, se salta la advertencia se pone a jugar y luego postea preguntando porque se le cae el juego en la mitad.

Lo del manifiesto, le voy a dar una leída, pero voy a tratar con la primera opción, como siempre, muy agradecido por las respuestas.

Pensaba que lo del boton derecho era conocido entre gamers la verdad. De todas formas podeis poner un leeme.txt o un aviso en la web donde se descargue el instalador tambien por si acaso no funciona lo de las propiedades.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Vicente en 22 de Abril de 2011, 12:58:18 PM
Pues eso, si ya no tienen que soportar Windows viejos, nada les impide hacer las cosas de forma un poco decente, que no sera por dinero y programadores :p
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: [EX3] en 22 de Abril de 2011, 04:36:37 PM
Cita de: Vicente en 22 de Abril de 2011, 12:58:18 PM
Pues eso, si ya no tienen que soportar Windows viejos, nada les impide hacer las cosas de forma un poco decente, que no sera por dinero y programadores :p
Ahi ni idea de como lo tienen montado pero si lo tienen implementado igual que su Source Engine por lo que tengo entendido, no me extraña que no quieran meterle mano al asunto para cambiarlo xD

Tambien te digo otra cosa, si algo funciona, y lleva haciendolo años, para que van a cambiarlo? ;)

Cita de: Vicente en 22 de Abril de 2011, 12:58:18 PM
Pensaba que lo del boton derecho era conocido entre gamers la verdad. De todas formas podeis poner un leeme.txt o un aviso en la web donde se descargue el instalador tambien por si acaso no funciona lo de las propiedades.
Pero entre casuals, que supongo que es el tipo de publico al que va dirigido su juego, no creo que sea tan conocido esa opcion ni creo que tengan ganas de meterse a toquetear ese tipo de cosas por miedo o desconocimiento. Ademas, primera premisa del programador (y sin ofender a nadie :P), el usuario es estupido, hay que darle las cosas mascadas (premisas aprendidas y asentadas de trabajar 4 años en un banco xD)

Salu2...
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 23 de Abril de 2011, 06:17:49 AM
Cita de: Vicente en 22 de Abril de 2011, 12:58:18 PM
Mmm, pues ahora me haces dudar, creo que si la verdad.
Haré las pruebas entonces, si no llega a funcionar te aviso.

Cita de: [EX3] en 22 de Abril de 2011, 04:36:37 PM
Cita de: Vicente en 22 de Abril de 2011, 12:58:18 PM
Pensaba que lo del boton derecho era conocido entre gamers la verdad. De todas formas podeis poner un leeme.txt o un aviso en la web donde se descargue el instalador tambien por si acaso no funciona lo de las propiedades.
Pero entre casuals, que supongo que es el tipo de publico al que va dirigido su juego, no creo que sea tan conocido esa opcion ni creo que tengan ganas de meterse a toquetear ese tipo de cosas por miedo o desconocimiento. Ademas, primera premisa del programador (y sin ofender a nadie :P), el usuario es estupido, hay que darle las cosas mascadas (premisas aprendidas y asentadas de trabajar 4 años en un banco xD)

Salu2...
El launcher y la comunidad llevan funcionando algunos años, así que los errores que describo son la cruda realidad de la experiencia, el leame y la información en la web las tengo desde que se descubrió el problema (hace tiempo), pero eso no evita que un porcentaje de los jugadores nuevos caigan en el error. Yo diría que el 98% del los jugadores no lee el leame.txt o la información completa del foro antes de comenzar a jugar y solo la mitad los lee cuando el programa les señala el error.
Del 50% restante, la mitad postea por millonésima vez el error y la otra mitad, igual entra a jugar y eso crea que un mes después nos reporten errores del tipo "se me cae el juego cuando entro en esta área", "No se me ven las animaciones", "Llegué a nivel 5 y no me da la habilidad que corresponde", etc.

Así que tal como dice Ex3 "Ademas, primera premisa del programador (y sin ofender a nadie :P), el usuario es estupido, hay que darle las cosas mascadas" que también es algo que he aprendido en varios años creando interfaces hombre máquina.

Como anécdota, cuando lanzamos el updater, los antivirus que revisan el trafico de internet provocaban un errores de "time out" al momento de actualizar, específicamente el NOD4, ya que congelaba la descarga cerca del final para analizar el archivo, si la descarga quedaba congelada por mucho tiempo (archivos grandes), perdía conexión con el servidor y saltaba el error de "time out".
Al igual que ahora, un error conocido, publicado, con solución en el leame y en el foro (igual que ahora), pero todas las semanas llegaba alguien al foro a colocar "Me he bajado el updater, pero me sale error cuando actualiza". Y como es costumbre, no te colocan ni el error, ni cuando pasó ni nada, y ahí vamos con la taumaturgia, la guija y el FBI  para tratar de encontrar la raíz del problema para terminar descubriendo que jamas se habían leído la solución (que aparecía en el foro y en el leame).
La solución al problema, fue cuando descubrí como modificar mediante el programa los parámetros para que no se desconectara del servidor, tal como dice Ex3, había que darles la solución probada y masticada.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Sante en 24 de Abril de 2011, 10:33:17 PM
Estuve hace un tiempo peleándome con esto, a lo mejor puedo aportar algo:

Básicamente, para que una aplicación pueda tocar en Program Files necesita ejecutarse de forma elevada. Esto se puede hacer bien porque el usuario la ejecute así de forma manual (con "Ejecutar como Admin."), o más habitualmente, con un manifiesto, como explica Vicente.

El manifiesto es la forma más sencilla, basta con incluir un archivo e indicar el nivel de permisos que quieres que tenga tu aplicación. Supongo que podrás encontrar una plantilla de estos manifiestos por Internet, pero si te hace falta te puedo pasar un ejemplo de los que usamos nosotros.

Para un actualizador que se activa siempre que vayas a jugar, es molesto que te pida permisos constantemente. Una forma de evitarlo es el dividir el programa en dos, el primer programa se ejecuta en modo no elevado para hacer la descarga y, si hay que instalar algo, invoca a un segundo programa (que es el que lleva el manifiesto) que se encarga de la instalación en sí. Esto tiene la ventaja de que el usuario ya se espera la ventana del UAC porque ha visto la descarga hacerse antes, y no le sale de imprevisto.

Es necesario dividir la aplicación en dos porque un proceso no puede elevarse una vez ya se está ejecutando. Es decir, si no tienes permisos una vez te lanzan, ya no hay forma de conseguirlos. Una posible manera de evitar eso (y hacerlo todo con una sola aplicacion) es detectar al principio si te hacen falta permisos, y si es asi, relanzarte con ShellExecute pasando "runas" como operación. Esto fuerza la ventana del UAC, aunque no está muy bien documentado y por tanto no lo recomiendo tanto como el usar manifiestos.

En cualquier caso hay que tener cuidado con un posible caso de error: Puede darse la situación de que se tenga el UAC desactivado y se ejecute desde una cuenta no administradora. En ese caso, pese a tener el manifiesto, al usuario no le saldrá ninguna ventana de permisos y tu aplicación se ejecutará de forma no elevada. Así que hay siempre que comprobar en el código si tienes o no los permisos que esperas tener llegados a ese punto, y si no es así, mostrar un mensaje de error.

Espero que te sirva. Un saludo.
Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Hechelion en 25 de Abril de 2011, 08:54:58 PM
Gracias por los consejos Sante, aún no miro el tema del manifiesto, pero si compartes la planilla te quedaría muy agradecido (aunque no lo implemente acá, el tema me interesa bastante y posiblemente lo implemente más adelante.).

Título: Re: Updater, permisos de escritura sobre directorio del juego.
Publicado por: Sante en 26 de Abril de 2011, 08:21:19 AM
Pues aquí esta el manifiesto:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Application"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
<description>Application description here</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>


De todo esto, lo interesante es el tag de requestedExecutionLevel donde le dices el nivel de ejecución que quieres: requireAdministrator para que te ejecuten con permisos de administrador.