Domanda

ho ri-fatto questa domanda qui perché le persone in ServerFault ritiene che questo è il luogo adatto per fare questa .

Sto cercando di impedire alle persone di login multipli in un unico computer e utilizzare la mia domanda contemporaneamente . In altre parole voglio impedirne l'esecuzione due volte sullo stesso computer, allo stesso tempo, in un dato momento vi sarà un solo singolo utente che esegue la mia applicazione .

C'è un motivo per me di impostare l'utilizzo delle licenze che una rigorosa; la mia app serve un mercato molto specializzato e molto di nicchia. Quindi, ogni copia costa circa decine di migliaia. Se tali molteplici guadagni login tecnologia a distanza risalto sarei messo fuori dal mercato in poco tempo.

Questo è perché voglio impedire loro di acquistare una licenza, installarlo su una macchina, e utilizzare alcune tecnologie desktop remoto fare multipla login utente. Voglio impedire loro di violare il contratto di licenza tecnologicamente , invece che l'applicazione della legge.

È comunque ci che posso fare nella mia richiesta per questo? O è login multiple simultaneamente semplicemente non è possibile?

Io preferirei una soluzione non dongle. La mia applicazione funziona solo su di Windows.

Modifica: A complicare ulteriormente la questione, mi permetto simultanea diversa Access versione (i miei clienti possono installare la versione più dello stesso software su una macchina e li fuoco fino allo stesso tempo). Solo che non permetto simultaneo accesso remoto.

È stato utile?

Soluzione

Vorrei chiarire il mio punto di vista un po '. Almeno setosa e mi sembra di essere interpretare questo in un modo diverso.

Da quello che ho capito, si sta cercando di evitare che più utenti (o più istanze dello stesso utente) di eseguire l'accesso su la macchina , allo stesso tempo. In questo si assume che la solo scopo della macchina è quello di eseguire l'applicazione, che non sarà generalmente il caso.

Utilizzando l'approccio di setosa (mutex a livello di sistema) per evitare più istanze esecuzione sulla stessa macchina è accettabile. Personalmente, avrei voluto per assicurarsi che non v'è alcun caso d'uso valida per un singolo utente che esegue due istanze dell'applicazione per realizzare un compito, prima di prendere questo approccio.

Si veda anche questo piccolo cruccio . Impedire a più utenti di utilizzare la stessa macchina rientra nella stessa categoria;)

Per quanto riguarda le molteplici problema di versione:. Scegliere un nome univoco per il mutex a livello di sistema per tutte le versioni (? Major) dell'applicazione

Esempio di base con un mutex a livello di 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;
        }

        // ...
    }
}

Il prefisso Global\ rende il mutex condivisi su più sessioni di server terminal. Senza di essa, sarebbe solo impedire a un utente di eseguire due istanze nella stessa sessione.

Si dovrebbe provare questo approccio su un account che ha limitato i diritti, come potrebbe essere possibile che gli account limitati non possono creare una tale mutex a tutti.

Altri suggerimenti

Vuoi per evitare che in esecuzione per due volte sullo stesso computer?

Se questo è il caso, la soluzione può essere abbastanza semplice; prendere un mutex a livello di sistema o di qualche approccio simile, e poi basta controllare che e assicurarsi che non sia già presente. Si potrebbe aprire un socket, o qualsiasi altra cosa, per raggiungere questo obiettivo.

O si vuole fermare in qualche modo un conto, diverso da quello che lo ha installato, eseguirlo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top