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 »

Vicente

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

[EX3]

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

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

Vicente

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.

Vicente

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

[EX3]

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

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

Hechelion

#20
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.

Sante

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.

Hechelion

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


Sante

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.






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.