SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: orfeo087 en Jueves 19 de Noviembre de 2009, 14:28

Título: Iniciar una aplicacion por unica vez
Publicado por: orfeo087 en Jueves 19 de Noviembre de 2009, 14:28
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..
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: tincho87 en Jueves 19 de Noviembre de 2009, 15:20
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
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: orfeo087 en Jueves 19 de Noviembre de 2009, 17:05
y ese codigo donde va¿? mi apli es una aplicacion de formularios basada en Visual C# .NET 2009  :mellow:
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: tincho87 en Jueves 19 de Noviembre de 2009, 18:32
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
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: orfeo087 en Jueves 19 de Noviembre de 2009, 19:31
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 ¿?
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: tincho87 en Jueves 19 de Noviembre de 2009, 19:59
Claro, la idea de la funcion es detectar lo antes posible que la aplicación ya se encuentra en ejecución.

Saludos
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: orfeo087 en Jueves 19 de Noviembre de 2009, 21:25
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());
        }
    }
}

Título: Re: Iniciar una aplicacion por unica vez
Publicado por: tincho87 en Viernes 20 de Noviembre de 2009, 02:46
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
Título: Re: Iniciar una aplicacion por unica vez
Publicado por: orfeo087 en Viernes 20 de Noviembre de 2009, 08:30
El codigo me a venido como anillo al dedo es justo lo que buscava  :lol:  aunq supongo que existiran otras formas de acerlo ..