Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2008
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Evitar 2 ejecuciones de mi aplicación. Unidad UIApp

Hola a todo el mundo,

Me he decidido a probar la unidad UIPass de Roman, por cierto muy buena utilidad, y muchas gracias por dejarla disponible.

Pero naturalmente he tenido problemas.

1º) la coloqué en la carpeta de mi proyecto
2º) la añadí al .DPR
3º) modifique las cadenas SMutex y SActivar
4º) modifique la función AppWndProc como se indica en el apendice
5º) modifique el procedimiento Registrar según el consejo de Domingo Seoane, y aquí es donde me ocurre el problema:
Código:
//mActivar := RegisterWindowMessage(sActivar);
//Mutex    := CreateMutex(nil, true, sMutex);
  mActivar := RegisterWindowMessage(PChar(sActivar + Application.ExeName)); // así le añade el Path y el nombre de la aplicación y hace la cadena única
  Mutex    := CreateMutex(nil, true, PChar(sMutex + Application.ExeName));
Si sigo el consejo de Domingo para crear cadenas diferentes añadiéndoles el camino y nombre de la aplicación, entonces NO me funciona, pero si dejo la versión original de Román me funciona.

De momento no voy a utilizar esta unidad en ningún otro sitio, pero me gustaría que funcionase adecuadamente.
__________________
Rafita.
Responder Con Cita
  #2  
Antiguo 16-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me ocurre que "Application.ExeName" contiene caracteres como las "barras invertidas" de la ruta al archivo, de modo que acaso esto impida a "RegisterWindowMessage()" hacer su trabajo. Tal vez habría que sustituir esas "barras invertidas" por otros caracteres, ¿no lo hace así Seoane? Acaso utiliza algún "hash" de la cadena en cuestión, de modo que siga siendo única, pero, no contenga caracteres especiales... ¿seguro que no hace algo así Seoane?

Lo digo porque si no lo hace así es porque todo esto que digo yo sobre los caracteres especiales en realidad no aplica en este caso, y debería funcionar tal como intentas hacerlo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 16-01-2008
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Muy buenas Dec, gracias por responder.


Tienes razón, son las barras invertidas o algo así, el caso es que con
Código:
mActivar := RegisterWindowMessage(PChar(sActivar + 'Inspeccion.exe')); // así le añade el nombre de la aplicación y hace la cadena única
 Mutex    := CreateMutex(nil, true, PChar(sMutex + 'Inspeccion.exe'));
SÍ me funciona, y además me permitirá utilizar la unidad de Román en más aplicaciones. Tendré problemas cuando tenga varias versiones de la misma aplicación instaladas en diferentes carpetas, pero eso no creo que llegue a ocurrir nunca.

Muchas gracias
__________________
Rafita.
Responder Con Cita
  #4  
Antiguo 16-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hombre, siempre puedes hacer uso de alguna función que sustituya las "barras invertidas" (tal vez espacios en blanco y algún que otro caracterer...) para intentar evitar los problemas que mencionas. O, directamente, obtener el MD5 de la cadena en cuestión, como muestra el mismo Seoane en un truco del ClubDelphi, y utilizar este MD5, lo que también te evitaría los potenciales problemas que dices.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 16-01-2008
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Hola Dec,

La próxima vez que utilice esta unidad lo haré como dices.

Por cierto, quería poner el nombre correcto de la unidad: UIApp por si alguien realiza una búsqueda en los foros que le aparezca.

saludos
__________________
Rafita.
Responder Con Cita
  #6  
Antiguo 16-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si te refieres a editar el título dalo por hecho.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 16-01-2008
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
esta es la tecnica que uso, la encontre por ahi en algun foro o pagina de DELPHI, no eh registrado cual.
Código Delphi [-]
program Project1;

uses
  Forms,
  WINDOWS,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
   MiMutex:THandle;
begin
  MiMutex:= CreateMutex(nil,false,'Project1.exe');
  if(GetLastError <> ERROR_ALREADY_EXISTS)then
     begin
     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
     ReleaseMutex(MiMutex);
     end;
end.
Este codigo va en la unidad del proyecto, lo que seria el ".dpr"

Última edición por juanlaplata fecha: 16-01-2008 a las 14:17:34.
Responder Con Cita
  #8  
Antiguo 16-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Juan, echa un vistazo a la unidad de Román, y al artículo relacionado. Ofrece otras ventajas además de la principal, por decirlo así.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 16-01-2008
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Si lo que quieres es solamente evitar dos ejecuciones, puedes usar el componente de LMD, (SE) que viene con el sofware adicional de Delphi, que esta en la pestaña LMDSys y que se llama LMDOneInstance y va de maravilla y es muy fácil de usar.
Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modificación a UIApp de Roman gluglu Varios 0 05-10-2007 19:02:28
Cambiar el formulario principal de la aplicación ator15 Varios 5 25-09-2007 04:31:37
error al probar aplicación Mc_Hacks Conexión con bases de datos 5 12-12-2006 20:00:13
uiapp liriko OOP 1 11-01-2006 19:10:35
problema con UIApp liriko OOP 4 16-12-2005 17:18:33


La franja horaria es GMT +2. Ahora son las 12:24:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi