PDA

Ver la Versión Completa : reemplazar un EXE que está en uso


carlosmari
03-12-2003, 14:26:54
Hola!!

¿Existe alguna manera de poder reemplazar un EXE que está siendo usado?

Supongamos que tengo una aplicación 'ventas.exe' que está siendo utilizado por n usuarios, pero tengo la urgencia de actualizar esa aplicación. No me importa que a los n usuarios les aparezca un error.
Al intentar copiar el nuevo exe me sale un error de que dicho archivo está siendo utilizado. Se que una alternativa es ir uno por uno y pedirle que salga pero ¿existe alguna otra manera de forzar dicha copia?

Todos los usuarios trabajan con Windows y existe una única aplicación (ventas.exe) que está alojada en un servidor NT y desde el cual acceden los usuarios.

Gracias por las sugerencias !!

__cadetill
03-12-2003, 15:30:12
Respuesta corta : No (y creo que vato el récor :D)

Respuesta larga : en NT, lo que podrías hacer es cerrar el recurso compartido y luego actualizar el exe. Eso sí, el problema es que los clientes no se enterarían de que ese recurso compartido ha sido cerrado (ya que no se les cerrará la app) hasta que intenten hacer algo con ella, lo que les provocara unos bonitos errores.
La verdad es que no creo que sea la manera más correcta, pero si lo quieres hacer..... Yo te recomendaría otras alternativas menos drásticas cómo tener, por ejemplo, un ejecutable de pruebas y sólo actualizaras ese y los clientes que necesiten de los cambios, que atacaran temporalmente a ese en lugar de al real

guillotmarc
03-12-2003, 15:53:12
Hola.

Otra solución que utilizo yo, es que los usuarios no ejecutan directamente el programa Ventas.exe, sinó que ejecutan el archivo de proceso por lotes Ventas.bat (también en el servidor).

Ese archivo por lotes es el que realmente llama a Ventas.exe. Cuando quiero cambiar el programa, simplemente lo copio como Ventas2.exe y modifico el Ventas.bat para que llame al nuevo ejecutable.

La próchima vez que los usuarios entren al programa, entrarán en el ejecutable correcto.

Saludos.

delphi.com.ar
03-12-2003, 16:06:47
Un caso Particular:
Si un Win9x ejecuta un EXE de 16Bits en un servidor NT/2000... El administrador del servidor puede sobreescribir en EXE sin tener la necesidad de desconectar a los usuarios previamente. ;)

Saludos!

carlosmari
03-12-2003, 17:50:08
muchísimas gracias por las sugerencias, me han sido de gran utilidad.

Hay una gran verdad cuando se dice que 'la experiencia hace la diferencia'.

Gracias por compartir sus experiencias !!

carlosmari
03-12-2003, 18:11:07
aquí estoy de vuelta ...

Ha probado haciendo un bat, solo que me aparece una ventana de DOS y luego se ejecuta mi aplicación normalmente. ¿Existe alguna manera de que esa ventana de DOS no aparezca?

guillotmarc
03-12-2003, 18:20:09
Hola

¿ Has probado a configurar el acceso directo que pones en el ordenador de los usuarios ?. En las propiedades, pestaña acceso directo, prueba a seleccionar Minimizada en la opción Ejecutar. NOTA : En esta misma pantalla puedes seleccionar un icono para el acceso directo.

Saludos.

carlosmari
03-12-2003, 18:47:32
la opción de minimizado me funcionó bien, solo que me gustaría que no me quedase esa ventana de DOS ... se que soy muy fino ... pero ojalá se pudiese eliminar. De hecho es lo que hago, la elimino manualmente con el mouse y luego sigo trabajando con mi aplicación.

El tema es, además de utilizar la opción de minimizado, encontrar un comando o algo que me cierre la ventana para que no quede en la barra de estado esperando nada.

Gracias !!! ... en el 'consejo de muchos hay sabiduría'

guillotmarc
03-12-2003, 19:31:34
Hola.

Prueba poniendo una línea exit dentro del archivo de proceso por lotes, después de llamar al ejecutable. Esto debería finalizar la sesión DOS.

Saludos.

hogol
03-12-2003, 20:45:55
Un exe se puede reemplazar siempre que quieras, aunque esté en ejecución.
El truco consiste en renombrar el exe antiguo. Luego se copia el exe nuevo y en paz.
Los usuarios que usan el exe no se enteran de nada y siguen trabajando con la versión antigua hasta que cierran el programa y vuelven a entrar.

Saludos
Hogol

carlosmari
03-12-2003, 21:19:29
he puesto el Exit y no sale. Hasta que no sale de la aplicación (ventas.exe) no se va esa pantalla de DOS.

guillotmarc
03-12-2003, 21:42:49
Hola.

Entonces, en lugar de ejecutar directamente la aplicación, usa el comando start.

Ejplo.

start Ventas.exe
exit

Saludos

carlosmari
04-12-2003, 12:28:30
Funcionó !!!

Coloqué el Start y no fue necesario el Exit.

Mil Gracias !!!

carlosmari
04-12-2003, 12:40:43
Un exe se puede reemplazar siempre que quieras, aunque esté en ejecución.
El truco consiste en renombrar el exe antiguo. Luego se copia el exe nuevo y en paz.
Los usuarios que usan el exe no se enteran de nada y siguen trabajando con la versión antigua hasta que cierran el programa y vuelven a entrar.


Intenté renombrar un archivo exe que está siendo usado y no me lo permite, ya que 'está siendo usado por otra persona o programa'

hogol
04-12-2003, 13:15:22
Pues yo lo hago muy a menudo y siempre me ha funcionado bien.
Normalmente lo que hago es cambiar la extension del fichero de .exe a .old
Misterios de la informática....

roman
04-12-2003, 17:55:39
Una forma de hacer esto funcionalmente idéntica a la que propone guillotmarc pero sin utilizar archivos bat podría ser construirte una pequeña aplicacíón Delphi que se encargue de lanzar el programa:


program Loader;

uses
Windows,
SysUtils;

{$R *.res}

begin
if not FileExists('ventas.exe') then
raise Exception.Create('No se encuentra la aplicación ventas');

if FileExists('ventas2.exe') then
begin
DeleteFile('ventas.exe');
RenameFile('ventas2.exe', 'ventas.exe');
end;

WinExec('ventas.exe', SW_SHOW);
end.


Este prorama no tiene formularios, sólo el archivo dpr.

El programa de ventas lo llamarías ventas2 para evitar renombrarlo tú mismo. Cada vez que haces un cambio en el programa simplemente tienes que colocar la nueva versión de ventas2.exe en el directorio donde esté ventas.exe y loader.exe y este último se encarga de utilizar la nueva versión cuando vuelva a arrancar y de borrar la anterior.

// Saludos