• Miércoles 20 de Noviembre de 2024, 18:45

Autor Tema:  Re: Problema. URGENTE POR FAVOR  (Leído 2524 veces)

ROBER.29

  • Miembro MUY activo
  • ***
  • Mensajes: 421
    • Ver Perfil
    • http://www.contrapixel.com
Re: Problema. URGENTE POR FAVOR
« en: Martes 22 de Abril de 2003, 18:52 »
0
Estimados compañeros,

Tengo el siguiente problema, he echo una aplicación la cual se instala en un servidor y se ejecuta en los terminales. Es decir, existen 17 ordenadores conectados en red a un servidor con windows nt server, mi aplicación está instalada en el servidor y en los otros ordenadores simplemente hay un acceso directo al ejecutable de mi aplicación.

Pues bien el cliente me ha pagado por 17 licencias pero ahora mismo se conecta más ordenadores y les pone el acceso directo puede utilizarlas, por lo tanto quiero saber la forma de poder evitar esto. Es decir quiero que en todo momento solo se pueda estar ejecutanto en 17 puestos a la vez, que cuando vaya a conectarse otro si ya estan los 17 que le diga que no dispone de licencia. Como lo puedo hacer?

Muchas gracias por atenderme. Espero haberme explicado con claridad.

Saludos,
Roberto García.
Roberto García
Moderador de Visual Basic.
Gerente
[contra]PixeL S.L.
Valladolid

Jaume

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #1 en: Miércoles 23 de Abril de 2003, 08:24 »
0
Si usas una base de datos crea una tabla que sea de contadores. Cada vez que alguien entre en la aplicación, por ejemplo en el evento Load de la pantalla inicial, haces un Select Max del campo ContadorInicio (por ejemplo) y lo updates con el valor que te retorne +1, siempre y cuando este valor no sea 17, o el que te interese. En caso contrario cierras la aplicación.

No es difícil

Salu2

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #2 en: Miércoles 23 de Abril de 2003, 11:17 »
0
A mi entender, la solución que plantea Jaume únicamente limita el número de usuarios que pueden abrir simultáneamente la aplicación; pero con tal de que no estén activos más de 17, la aplicación puede ejecutarse desde 200 equipos.

Mi solución es la siguiente:

Primero: En cada equipo con licencia abres un directorio con el nombre, por ejemplo, de tu aplicación ("miAplicac", para mi ejemplo)
y en el mismo copias el fichero UsuSetup.mdb que te adjunto.  ¡¡¡Atención!!! Cada usuario tendrá grabado en el campo PdeP su propia Clave de Acceso (Palabra de Paso), que ha de coincidir con la que tú definas en el registro correspondiente a ese número de usuario en el otro fichero PrgSetup.mdb, que también te adjunto.

Esa Clave de acceso, estará lógicamente encriptada.

Segundo:  En el Servidor, en el directorio de tu propia aplicación, grabas el fichero antedicho PrgSetup.mdb, y encriptas también este fichero.
Previamente, en PrgSetup.mdb habrás generado los 17 registros para tus 17 usuarios, y en cada uno habrás grabado encriptada la clave de acceso correspondiente, en el campo PdeP
Puedes en este fichero incrementar nuevos campos, como puede ser por ejemplo la ruta para la base de datos común de la aplicación, por si no quieres tenerla en App.Path; el nombre personalizado de cada usuario, por si quieres hacer esquisiteces...

Tercero: En el Objeto inicial de tu proyecto, lo primero que haces es pedir al usuario su Número de Usuario que volcarás en una variable NumUsu, por ejemplo; luego desencriptas el fichero App.Path & "Prgsetup.mdb". lo abres y ejecutas un MoveNext hasta situarte en el registro correspondiente al NumUsu; defines una variable MiControl = M_Empres!PdeP

Cuarto: Abres el fichero "C:MiAplicacUsuSetup.mdb"; la tabla "M_Usuar" y comparas si el campo "PdeP" es igual a la variable "MiControl". De esta forma cada usuario tiene que tener una sóla clave. Si la comparación es falsa, haces un End tras presentar mensaje de que "Usted no es el Usuario Núm. " & NumUsu.  
Puedes incluso añadir el nombre propio del usuario, para que quede personalizado... Eso a gusto del consumidor.

Quinto: Luego desencriptas MiControl y preguntas al usuario su palabra de paso, para dárselo si coincide con el password que le habías grabado tú.

Naturalmente tienes que trabajarte este sistema, haciéndote una rutina externa con la cual crear los registros de cada usuario con su password encriptado, y que al mismo tiempo genere un fichero UsuSetup.mdb con una tabla M_Usuar que contenga esa misma clave en su campo PdeP

Saludos y suerte
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Jaume

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #3 en: Miércoles 23 de Abril de 2003, 11:41 »
0
ROBER.29 ha pedido que solo se puedan ejecutar 17 ejecutables a la vez, independientemente de las máquinas que puedan tener la aplicación.

Tu respuesta es correcta, y es buena para personalizar el programa, pero te obliga a generar un proceso de mantenimiento de usuarios, puesto que no puedes desplazarte tú cada vez que un empleado cause baja, o se incorpore uno nuevo que deba tener la aplicación.

Igualmente podrán tener la aplicación en tantas máquinas como quieran, puesto que el usuario no depende de la máquina, por lo que estamos en las mismas.

ROBER.29 debe decidir qual le interesa más.

Salu2

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #4 en: Miércoles 23 de Abril de 2003, 13:13 »
0
Hola Jaume: por supuesto que es Roberto quien tiene la última palabra.
Yo he interpretado que a él le duele el que estén usando su programa desde equipos para los cuales él no ha cedido la licencia; por eso le he presentado mi versión, con la que creo que puede controlar precisamente ese abuso de su cliente.
Si tuviera que afinar más e impedir que se use desde equipos distintos a los predeterminados, podría grabar en el PrgSetup el nombre interno de cada máquina. Pero eso sólo en el caso de que haya un informático interesado en hacerle a Roberto la pascua...
Con tu versión sospecho que podrán seguir utilizándola los 200 equipos para los que él no ha autorizado su uso.  Eso es lo que yo entiendo.
En todo caso, perdona si interpretas que me he metido donde tú ya habías sentado plaza; mi idea es que en un foro puede uno meter baza, e incluso meter la pata, como hacemos muchas veces con la mejor intención.

Un abrazo a ambos

Jaume

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #5 en: Miércoles 23 de Abril de 2003, 14:12 »
0
J.M. Disculpa si he dado la impresión de molestarme. De ningún modo me molesta que comenten mis respuestas o que las mejoren. Puede que haya sonado mal, puede por que lo estoy haciendo desde el trabajo y lo he escrito un poco deprisa.

Ya te he comentado que tu respuesta me parece correcta, es más, mis aplicaciones tienen un sistema parecido de usuario y password.

Solo he querido matizar nuestras visiones, para que ROBER.29 vea las diferencias entre nuestros puntos de vista.

Tu has propuesto uno más complejo, pero que en mi opinión, si no es que haces este último control de máquina que comentas en el último mensaje, acarrea el mismo problema que el mio, puesto que se podrá ejecutar el programa desde tantas máquinas como quieras sabiendo un nombre de usuario y una contraseña.

Solo pretendo mejorar las opiniones que vamos dando.

:good:

Salu2

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema. URGENTE POR FAVOR
« Respuesta #6 en: Miércoles 23 de Abril de 2003, 14:57 »
0
Hola, asi como de novedad estoy por aca metiendo la cucharada.
Segun entendi tu pregunta y espero no entenderla mal lo que más te podria preocupar es que usen la liscencia en màs de  17 equipos.

Aca en donde trabajo tenemos una liscencia asi..y se se maneja como se muestra a continuacion:

Resulta que solo hay 30 liscencias del aplicativo, asi que el proveedor genero una tabla en la base de datos con 17 ids permitidos, cada id esta representado por la direccion ip de la maquina que tiene liscencia asi que nunca se puede utilizar una liscencia en una maquina que no tenga una ip registrada.

Claro que como dijo jaume esto genera mantenimientos pero en el caso de mi empresa esto se maneja asi:

Resulta que el proveedor nos da acceso a todas las bases de datos del software es decir usuarios, permisos, otras tablas etc... con exepcion de una base de datos de liscencias, de la cual solo tienen acceso ellos y logicamente el software, cada vez que hemos necesitado actualizar un registro, como por ejemplo que la maquina con liscencia cambie de IP, les hemos enviado la solicitud por e-mail, y a vuelta ellos nos envian un EXE que trae enbebido un script con las modificaciones pertinentes en esta tabla..este exe nunca pesa mas de 10k, y como son solo 17 liscencias, lo mas que hace el proveedor es hacer un query para modificar 17 registros... eso es siendo muy exagerado ya que por lo general solo  se modifica 1 registro.

Creo que en tu caso esto seria muy optimo ya que nos comentas que solo son 30 liscencias, si fueran 3000 seria tenaz, pero no son 3000:P espero haberles servido de ayuda.

hasta pronto.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #7 en: Miércoles 23 de Abril de 2003, 18:21 »
0
Este es un problema propio de los foros; en un chat no te ves la cara, pero al menos respondes en directo y no da tiempo a malas interpretaciones...
Porque yo en este caso he empezado diciéndote "sin acritú..." en plan de gracia, pero quizá tú lo hayas interpretado como que veo acritud en tu mensaje anterior, lo cual no es así.

En resumen, que los dos estamos de acuerdo, y que a Roberto se lo estamos complicando con nuestros temas y el nuevo de Juank... Va a tener que decidir lo que mejor le vaya.

Un afectuoso saludo

HurryCrack

  • Miembro MUY activo
  • ***
  • Mensajes: 206
    • Ver Perfil
Re: Problema. URGENTE POR FAVOR
« Respuesta #8 en: Miércoles 23 de Abril de 2003, 18:33 »
0
Hola Rober no se si esto te servira pero no he encontrado nada mas simple y facil de usar para IMPEDIR LA EJECUCION DE UN PROGRAMA EN USO. Solo debes convertirlo a 17 programas en uso, fale?
Entiendo ke sea un problema grabe, ya ke se estan aprobechando de algo ke no es suyo.

' Para que funcione el codigo debe estar compilado en .EXE

If App.PrevInstance = True Then
     MsgBox "Este programa ya esta en ejecución !", vbCritical, "Error"
End
End if


Espero te sea de ayuda, sino es ke no se como detectas la ejecucion de tu programa sin utilizar API'S de windows.
Tambien supongo ke sera demasiado tarde para recomendarte ke ese tiop de programas deben hacerse en el formato CLIENTE/SERVIDOR lo cual te ahorraria muchos kebraderos de cabeza.
Por cierto no se como funciona eso de tener un programa en un servidor y crearle X accesos directos, no te da ningun tipo de conflicto? bueno ya te digo ke no lo veo. Si necesitais algo andare por aki, un saludo.:hippi:

ROBER.29

  • Miembro MUY activo
  • ***
  • Mensajes: 421
    • Ver Perfil
    • http://www.contrapixel.com
Problema. URGENTE POR FAVOR
« Respuesta #9 en: Jueves 24 de Abril de 2003, 11:53 »
0
Muchas gracias por vuestra ayuda. Al final lo he solucionado comprobando cuantas personas están conectadas a la base de datos.

En el form load del formulario conecto con la base de datos y luego compruebo cuantas personas hay conectadas con la siguiente función:

Private Sub control_licencias(ByVal conexion As String)
    Dim Cn As New ADODB.Connection, Rs As New ADODB.Recordset
    Dim cont As Integer
    Const JET_SCHEMA_USERROSTER As String = "{947bb102-5d43-11d1-bdbf-00c04fb92675}"
   
    Cn.Open conexion
    Set Rs = Cn.OpenSchema(adSchemaProviderSpecific, , JET_SCHEMA_USERROSTER)
   
    cont = 0
    While Not Rs.EOF
        If Rs!CONNECTED Then
            cont = cont + 1
        End If
        Rs.MoveNext
    Wend
   
    If cont > 17 Then
        FrmMensaje.ver_botones 1
        FrmMensaje.lblInformacion.Caption = "No hay ninguna licencia libre."
        FrmMensaje.Show
        error = True
        Unload FrmRecorder
    End If
   
    Rs.Close: Set Rs = Nothing
    Cn.Close: Set Cn = Nothing
End Sub

En el caso de que haya más de 17 personas no le djo seguir ejecutando la aplicación.

Gracias a todos.

Saludos,
Roberto García
Roberto García
Moderador de Visual Basic.
Gerente
[contra]PixeL S.L.
Valladolid