Pregunta

Me re-hecho esta pregunta aquí porque la gente en ServerFault considera que este es el lugar adecuado para hacer esta .

Estoy tratando de evitar que la gente múltiple de inicio de sesión en un solo ordenador y utilizar mi solicitud simultáneamente . En otras palabras, quiero impedir que se ejecute dos veces en el mismo equipo, al mismo tiempo, en un momento dado habrá sólo un único usuario que ejecuta mi aplicación .

Hay una razón para mí para establecer el uso de licencias que el estricto; mi aplicación sirve a un mercado muy especializado y muy nicho. Por lo tanto, cada copia cuesta alrededor de decenas de miles de personas. Si tales ganancias múltiples inicio de sesión remoto tecnología prominencia que estaría fuera del negocio en poco tiempo.

Esto es porque quiero que dejen de comprar una licencia, instalarlo en una máquina, y el uso de ciertas tecnologías de escritorio remoto para hacer múltiples conexión del usuario. Quiero evitar que violen el contrato de licencia tecnológicamente , en lugar de hacer cumplir la ley.

¿Hay alguna forma que yo puedo hacer en mi solicitud para esto? O es múltiple de inicio de sesión al mismo tiempo simplemente no es posible?

Yo preferiría una solución no dongle. Mi aplicación se ejecuta en Windows solamente.

Editar: Para complicar más el asunto, me permito el acceso diferente versión simultánea (mis clientes pueden instalar múltiples versiones del mismo software en una máquina y disparar hacia arriba al mismo tiempo). Simplemente no permitir el acceso remoto simultáneo.

¿Fue útil?

Solución

Permítanme aclarar mi punto de vista un poco. Al menos sedoso y me parece estar interpretar esto de una manera diferente.

Por lo que entiendo, usted está tratando de evitar que múltiples usuarios (o más instancias del mismo usuario) de conectarse en la máquina al mismo tiempo. En este se asume que el único propósito de la máquina se va a ejecutar su aplicación, que por lo general no será el caso.

Usando el enfoque de sedoso (mutex de todo el sistema) para evitar varias instancias se ejecute en la misma máquina es aceptable. En lo personal, me gustaría asegurarse de que no hay ningún caso de uso válido para un solo usuario que ejecuta dos instancias de su aplicación para realizar una tarea, antes de tomar este enfoque.

motivo favorito de . La prevención de múltiples usuarios el uso de la misma máquina cae en la misma categoría;)

En cuanto a su problema de múltiples versiones:. Elegir un nombre único para su exclusión mutua de todo el sistema para cada versión (? Mayor) de su solicitud

Ejemplo básico con un mutex de todo el sistema:

static class Program
{
    private static Mutex appMutex = new Mutex(false, "Global\\MyApp 1.0");

    [STAThread]
    static void Main()
    {
        if (!appMutex.WaitOne(0))
        {
            MessageBox.Show("Application is already running. Have a nice day.");
            return;
        }

        // ...
    }
}

El prefijo Global\ hace que la exclusión mutua compartida a través de múltiples sesiones de Terminal Server. Sin ella, sólo sería impedir que un usuario ejecute dos instancias en la misma sesión.

Debe probar este enfoque en una cuenta con derechos limitados, ya que podría ser posible que las cuentas restringidas no pueden crear un mutex tales en absoluto.

Otros consejos

¿Quieres evitar que ejecutar dos veces en el mismo equipo?

Si ese es el caso, la solución puede ser muy simple; llevar a cabo un mutex de todo el sistema o algún método similar, y luego simplemente comprobar que y asegúrese de que no existe ya. Se podría abrir un socket, o lo que sea, para lograr eso.

O es que quiere dejar de alguna manera una cuenta, distinta de la que lo instaló, ejecutarlo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top