Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Actualizar Ejecutable

Estas en el tema de Actualizar Ejecutable en el foro de Visual Basic clásico en Foros del Web. Hola a todos, le dejo una inquietud y espero me puedan ayudar, meren tengo un sistema comercial funcionando en red, el problema que me surje ...
  #1 (permalink)  
Antiguo 18/02/2010, 07:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 14
Antigüedad: 16 años, 7 meses
Puntos: 0
Actualizar Ejecutable

Hola a todos, le dejo una inquietud y espero me puedan ayudar, meren tengo un sistema comercial funcionando en red, el problema que me surje es que cuando tengo que modificar el sistema y actualizar los ejecutables, tengo que pedirle a los usuarios que cierren el sistema para asi poder actualizar el sistema, y se torna tedioso porque tienen que dejar de trabajar, cerrar el sistema y volver a abrirlo, la pregunta es... existe alguna manera de Actualizar Los Ejecutables sin la necesidad de que los usuarios del sistema lo cierren y lo tengan que volver a abrir???.....desde ya muchas gracias
  #2 (permalink)  
Antiguo 18/02/2010, 08:39
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años, 1 mes
Puntos: 19
Respuesta: Actualizar Ejecutable

Obvio que no...

No se puede reemplazar un .exe si ese .exe esta siendo utilizado en el mismo instante.

Supongamos que el exe de tu aplicacion se llama A.exe entonces creas otro exe llamado B.exe
A.exe ejecuta a B.exe y se cierra A.exe
B.exe actualiza la aplicacion, y una vez actualizado ejecuta A.exe y se cierra B.exe

Eso es todo, todos los software trabajan asi para actualizarse, un claro ejemplo el de Firefox, que cuando termina de actualizar te dice que se va a reiniciar (ojo el firefox guarda el estado actual para volverte a poner las mismas paginas)
  #3 (permalink)  
Antiguo 18/02/2010, 10:10
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Actualizar Ejecutable

Existe un truco, que por lo menos en XP funciona y es el siguiente:

Tengo una aplicación ejecutándose en multipuesto que se llama Programa.exe, entonces lo que hago es lo siguiente:

Renombrar el Programa.exe en Programa.$$$ y de momento XP traga, no pasa nada, te permite hacerlo sin mayor problema.

Después copio en la carpeta el nuevo Programa.exe y a partir de ahí, cada usuario que sale y vuelve a entrar dispone sin darse cuenta de la nueva aplicación.

Tengo en mente trabajar sobre esta idea para evitarme problemas, quizás el EXE debería comprobar en algún momento si ha cambiado la Fecha/Hora de Programa.exe con App ya que de ser así, significa que ha sido modificado.

Al iniciarse nuevamente Programa.exe podría intentar borrar Programa.$$$ y si no puede no pasa nada, alguno de ellos lo conseguirá cuando Programa.$$$ no esté en uso de ninguno.

A ver si entre todos le damos vueltas a esta idea y conseguimos una rutina que lo haga mas facil.

Saludos
  #4 (permalink)  
Antiguo 19/02/2010, 14:40
 
Fecha de Ingreso: mayo-2008
Mensajes: 14
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Actualizar Ejecutable

No me quedó muy claro el tema pero intentaré resolverlo, de todas maneras leagradezco mucho que hayan contestado, intenteré realizar sus sujerencias, muchas gracias de nuevo, si tienen algun otro aporte o algo tambien les agradezco referido a ese tema
  #5 (permalink)  
Antiguo 20/02/2010, 05:54
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 4 meses
Puntos: 29
Respuesta: Actualizar Ejecutable

Erbuson

No sabía eso de la extensión $$$ (como tantas otras cosas) y me ha parecido muy interesante. Y funciona (lo digo para los incrédulos).

PD: También me he guardado tu conversión de importes como curiosidad, aunque aún no la he probado.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 20/02/2010, 07:46
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Actualizar Ejecutable

Hola PKJ, lo de la extensión $$$ es un ejemplo, cualquier cambio de nombre funciona, intuyo que la razón pudiera ser porque Windows no carga Totalmente en memoria el programa y conserva en sus entrañas la dirección del mismo para ir accediendo a este a medida que lo necesita por razones de optimizar memoria aunque ya digo que esto nos es mas que una suposición.

De todos modos después de haber leído muchas veces tus mensajes y haber visto tus ejemplos no dudo de que en breve se te ocurrirá alguna solución práctica porque por lo que he podido comprobar en el breve tiempo que llevo con vosotros imaginación no te falta.

Si tienes alguna idea estamos en contacto, lo que yo estoy pensando es que podría haber una rutina Public que compruebe la existencia de App.Name .$$$ o algo similar y si existe y su fecha no coincide con la del programa que está en memoria avisar de que tienes una actualización.

En fin es una idea a la que le doy vueltas pero no acabo de enganchar todos los cabos.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #7 (permalink)  
Antiguo 20/02/2010, 09:32
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 4 meses
Puntos: 29
Respuesta: Actualizar Ejecutable

Saludos compañero.

La verdad es que no creo que se pueda mejorar mucho lo que ya has comentado tú.
Ya que no se puede modificar el exe mientras está en uso, la mejor solución es esa que tu dices.

Para saber si hay una actualización imagino que como tu dices bastaría con memorizar la fecha y hora de modificación del app.exename al cargar el programa y en un timer comprobar cada x segundos si ha cambiado. De ese modo puedes avisar de que hay que reiniciar el programa o lo que haga falta según el caso. Ya sea memorizar el estado como dice Culd que hace el firefox o simplemente ejecutar el nuevo exe y cerrar el actual.
Al arrancar el programa se elimina cualquier versión $$$ antigua si existe y punto.

Me ha parecido un aporte realmente interesante.

Por otro lado agradecerte la confianza que demuestras en mi capacidad. La verdad es que soy bastante ignorante pero imaginación si que le hecho.
No sé si habrás probado mi reproductor de video con lectura de subtitulos .srt. Está en la sección de audio video y multimedia.
Si lo pruebas verás que muy vistoso no es, ni mucho menos perfecto, pero tiene muchas funciones que otros programas no incluyen.

Bueno, no me extiendo más. Nos leemos.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 20/02/2010, 12:19
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: Actualizar Ejecutable

Parece ser que de esta manera funciona, pero ya se sabe que todos los caminos conducen a Roma

Al Iniciar el programa, memorizará la Fecha del EXE que está ejecutanto, despúes con un timer o cuando uno quiera verifica si hay una nueva versión y da el aviso, sale, etc

En mi caso, al mantener una Red de usuarios, si los cambios no son muy importantes, simplemente renombraré el .exe original por el .$$$ y pondré el nuevo exe. Los usuarios que entren después de la actualización, intentarán borrar el .$$$ por si ya no está en uso y a medida que salgan y entren estarán actualizados, sólo cuando .$$$ (el primer .exe) no esté en uso será borrado.


Código:
Option Explicit

Private Sub Form_Load()
  NuevaVersion
End Sub

Private Sub Command1_Click()
  If NuevaVersion Then MsgBox "Existe una nueva version"
End Sub

Public Function NuevaVersion() As Boolean
  Static FechaDelExe As Date
  On Error Resume Next
  If FechaDelExe = 0 Then
    ' La primera vez que se llame a NuevaVersión, memorizará la fecha del EXE
    FechaDelExe = FileDateTime(App.Path & App.EXEName & ".exe")
    ' Borrará si puede y existe el .$$$ si alguien lo usa no lo borrará y seguirá
    Kill App.Path & App.EXEName & ".$$$"
    Exit Function
  End If
  ' Si la fecha guardada y la del exe son diferentes, es una nueva versión
  If FileDateTime(App.Path & App.EXEName & ".exe") <> FechaDelExe Then NuevaVersion = True
End Function
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: ejecutable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:54.