• Viernes 3 de Mayo de 2024, 00:27

Autor Tema:  Iniciar una aplicacion por unica vez  (Leído 1766 veces)

orfeo087

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Iniciar una aplicacion por unica vez
« en: Jueves 19 de Noviembre de 2009, 14:28 »
0
Buenas pues dado que el compilador de de Microsoft no tiene la opcion para acer esto si alguien save como acerlo que lo diga que es urgente..

tincho87

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #1 en: Jueves 19 de Noviembre de 2009, 15:20 »
0
Hola, a mi me paso lo mismo y lo resolvi de la siguiente forma:

Implementé un semaforo a nivel del sistema, que lo crea por primera vez la aplicación y verifica que no esté creado. En caso de estar creado, quiere decir que la aplicación ya se encuentra corriendo. Con esto evitas por ejemplo que le cambien el nombre a la aplicacion(pepe.exe a pepito.exe) y lo ejecuten.

Citar
       
        public static bool ExistePrograma()
        {
            bool t;

            System.Threading.Mutex m = new System.Threading.Mutex(true, "NombreSemaforo", out t);

            return !t;
        }

Espero haberte ayudado.
Saludos

orfeo087

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #2 en: Jueves 19 de Noviembre de 2009, 17:05 »
0
y ese codigo donde va¿? mi apli es una aplicacion de formularios basada en Visual C# .NET 2009  :mellow:

tincho87

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #3 en: Jueves 19 de Noviembre de 2009, 18:32 »
0
Es una funcion estatica, entonces la podes llamar desde cualquier lado. Yo la tengo implementada en una clase estatica(tiene todas funciones estaticas que las invoco sin tener que crear una instancia de la clase) y la llamo cuando hago el Load del form principal, entonces si el programa ya está ejecutandose, lo cierro.

Saludos

orfeo087

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #4 en: Jueves 19 de Noviembre de 2009, 19:31 »
0
me refiero a que si se pone en el archivo que llama al primer formulario, ahora mismo no puedo especificar cual es porq no estoy en la oficina y no tengo el proyecto delante. pero hay un archivo que es el que carga al primer formulario, se pone en ese ¿?

tincho87

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #5 en: Jueves 19 de Noviembre de 2009, 19:59 »
0
Claro, la idea de la funcion es detectar lo antes posible que la aplicación ya se encuentra en ejecución.

Saludos

orfeo087

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #6 en: Jueves 19 de Noviembre de 2009, 21:25 »
0
Vale pero supongamos que yo no tengo ni idea de C# como ago para usar ese codigo ¿?

Citar

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace NCSoft_Apply_Update
{
    static class Program
    {
        /// <summary>
        /// Punto de entrada principal para la aplicación.
        /// </summary>
        [STAThread]

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new main());
        }
    }
}


tincho87

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #7 en: Viernes 20 de Noviembre de 2009, 02:46 »
0
lo que podes hacer es lo siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace NCSoft_Apply_Update
{
static class Program
{
/// <summary>
/// Punto de entrada principal para la aplicación.
/// </summary>
[STAThread]

    static void Main()
       {
//Compruebo que la aplicación no se este ejecutando.
        if(ExistePrograma())
        {
            Application.Exit();
            return;
        }

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new main());
    }

    public static bool ExistePrograma()
    {
        bool t;

        System.Threading.Mutex m = new System.Threading.Mutex(true, "NombreSemaforo", out t);

        return !t;
    }

}
}


saludos

orfeo087

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Iniciar una aplicacion por unica vez
« Respuesta #8 en: Viernes 20 de Noviembre de 2009, 08:30 »
0
El codigo me a venido como anillo al dedo es justo lo que buscava  :lol:  aunq supongo que existiran otras formas de acerlo ..