Visual Basic - Evitar multiples instancias en una Lan

Life is soft - evento anual de software empresarial
 
Vista:

Evitar multiples instancias en una Lan

Publicado por Daniel (2 intervenciones) el 27/10/2006 15:23:23
Tengo una aplicación en una carpeta compartida en una lan , necesito hacer que si alguíen de la red la esta usando , y otro la quiere abrir que no le permita que salga un mensaje ej: "La aplicación esta siendo utilizada , Pruebe mas tarde"
Intenté con el App.PrevInstance , pero funciona solo en mi maquina local , no en la red.

Agradesco si me dan algun ejemplo de codigo , ya que no tengo mucho conocimiento de visualbasic. La aplicación no usa base de datos.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Evitar multiples instancias en una Lan

Publicado por Arnaldo (53 intervenciones) el 27/10/2006 18:07:30
Hola, se me ocurre que podrias declarar el estado del programa de la siguiente manera, si usas una BD, entonces, simplemente lo declaras alli, sino podrias crear un archivo y preguntar por su existencia, o imprimir en el archivo el estado del programa al inicio y finalizacion del mismo.
es lo que se me ocurrio en este momento, muy sencillo y rapido.
Espero te sirvade algo o te de alguna idea mas copada. saludos
Arnalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por Daniel (2 intervenciones) el 27/10/2006 20:33:51
El programa no usa base de datos , algun codigo de ejemplo de como hago para crear un archivo y preguntar por su existencia, o imprimir en el archivo el estado del programa al inicio y finalizacion del mismo. ?

Algun codigo que haga algo de esto ? mis conocimientos de vb son medios pobres

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por The Emulator (96 intervenciones) el 27/10/2006 23:25:07
Hola

La pregunta es el programa es ejecutado desde una carpeta compartidad en la red???

Porque si es asi si puedes usar lo del archivo que te dijeron en elmensaje anterior y seria m,as momeno asi:

Miarar si el archivo existe si existe mostrar mensaje y cerrar el programa, si el archivo no existe se crea el archivo y se sigue ejecutando la aplicacion

Private Sub Form_Load()
If Dir(App.Path & "\ArchivoSegiridad.sec") = "" Then
Open App.Path & "\ArchivoSegiridad.sec" For Output As 1
Close 1
Else
MsgBox "La aplicacion ya esta siendo ejecutada"
End
End If
End Sub

Al momento de que el programa se cierre debes eliminar el archivo para dejarlo libre para otro usuario

Private Sub Form_UnLoad()
Kill App.Path & "\ArchivoSegiridad.sec"
End Sub


Pero si tu aplicacion no es ejecutada desde una carpeta compartida en la red, sino que en cada equipo es insatlada puedes usar lo anterior pero tendrias que compartir una carpeta y direccionar el programa para que ejecute el codigo anterior apuntando a la carpeta compartida ya que con el codigo anterior se crea y elimina el archvio teniendo en cuenta la ruta desde donde se ejecutaba el programa

Otra opcion seria mandando mensajes por la red por ejemplo al cargar tu programa que mandara un mensaje a la direccion 255.255.255.255., en tu programa cuadrar funciones que permitan enviar y recivir datos asi cuando un programa envie un mensaje a esa direccion que los programas que se esten ejecuntando le devulvan el mensaje de que ya esta siendo ejecutado.

O tambien podrias crear un programa cliente servidor donde el cliente(tu programa se comonicara con el servidor y lepidiera permiso para ejecutarse) en el servidor podrias saber si alguien ya esta ejecutando o no el programa.

Bueno espero este te sirva para lo que necesitas

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por Daniel (1 intervención) el 28/10/2006 16:50:43
Gracias The Emulator por la respuesta , no tengo ningun form que sea
Private Sub Form_UnLoad() y cuando lo creo que sale "Procedure delcaration does not mach description of event or procedure having the same name"

El otro problema es que cuando me sale el mensaje "La aplicacion ya esta siendo ejecutada"
igual carga el programa como si cargaran solo los "textbox" , aunque no te deja hacer nada , ¿como hago para que no salga esto?

Para cerrar el programa uso el botón cerrar que tiene cualquier ventana , como hago para que me elimine el ArchivoSegiridad.sec , si no tengo ningun Form_UnLoad() ?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por Mauro (79 intervenciones) el 28/10/2006 21:28:33
Si usas el boton cerrar de cualquier ventana de windows, hacelo en el evento queryunload.

Saludos.

Mauro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por daniel (1 intervención) el 29/10/2006 00:11:29
No tengo ningun evento queryunload , en el codigo , ¿Donde aparece eso?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar multiples instancias en una Lan

Publicado por Mauro (79 intervenciones) el 30/10/2006 13:04:09
Entonces tenes que generarlo, cada vez que cerramos nuestra aplicacion con el boton cerrar "X" de la ventana de windows se produce el evento queryunload.

Asi como generas el evento Load, en la parte de Codigo tenes dos listas una donde seleccionas el ambito, Ej. General Declaraciones, Form1, Txt1, etc, y de acuerdo a la selecciona hecha en esa lista, se actualiza la lista de la derecha, en tu caso selecciona Form1 de la lista de ambito a tu izquierda, automaticamente se actualiza la lista de la derecha con los eventos del form1, desplega la lista de la derecha y busca el evento queryunload, cuando selecciones ese elemento en la parte de codigo te genera el siguiente Codigo.

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

End Sub

Dentro de esas lineas colocas el codigo que queres que se ejecuten cada vez que presiones el boton cerrar del formulario.

Espero que te sirva.

Saludos Mauro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar