Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Updater, permisos de escritura sobre directorio del juego.

Iniciado por Hechelion, 21 de Abril de 2011, 09:02:46 PM

« anterior - próximo »

Hechelion

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.

Vicente

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.

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Vicente

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.

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Vicente

Algo hacen seguro para elevar privilegios. Leyendo la MSDN no encuentro mucho excepto algunas cosas utilizando un manifiesto.

Vicente

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

Hechelion

#7
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?

Vicente

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

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

#10
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

Vicente

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 :)

Vicente

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

Hechelion

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.

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.