Question

Je re-posé cette question ici parce que les gens à ServerFault a estimé que c'est l'endroit approprié pour poser .

Je suis en train d'empêcher les gens de connexion multiples dans un seul ordinateur et utiliser mon application simultanément . En d'autres termes, je veux l'empêcher de courir deux fois sur le même ordinateur, en même temps dans un temps donné, il y aura qu'un seul utilisateur exécutant mon application .

Il y a une raison pour moi de définir l'utilisation de licence stricte; mon application sert un très spécialisé et marché très niche. Par conséquent, chaque copie coûte environ des dizaines de milliers. Si ces gains multiples technologie de connexion à distance d'importance que je serais mis en faillite en un rien de temps.

Ceci est parce que je veux les empêcher d'acheter une licence, l'installer sur une machine, et utiliser certaines technologies de bureau à distance pour faire plusieurs connexions utilisateurs. Je veux les empêcher de violer l'accord de licence technologiquement , au lieu de l'application de la loi.

Y at-il de toute façon que je peux faire dans ma demande pour cela? Ou est multiple connexion simultanée est tout simplement impossible?

Je préférerais une solution non dongle. Mon application fonctionne uniquement sous Windows.

Edit: Pour compliquer davantage la question, je laisse l'accès version différente simultanée (mes clients peuvent installer plusieurs versions du même logiciel sur une machine et leur mettre le feu en même temps). Je ne permets pas de connexion à distance simultanée.

Était-ce utile?

La solution

Permettez-moi de préciser mon point de vue un peu. Au moins soyeux et je semble interpréter cela d'une manière différente.

D'après ce que je comprends, vous essayez d'éviter que plusieurs utilisateurs (ou plusieurs instances du même utilisateur) de se connecter sur la machine en même temps. En cela, vous assumez que le seul but de la machine est d'exécuter votre application, qui ne sera généralement pas le cas.

En utilisant l'approche soyeuse (mutex de système) pour empêcher plusieurs instances de fonctionner sur la même machine est acceptable. Personnellement, je veux vous assurer qu'il n'y a pas de cas d'utilisation valable pour un seul utilisateur deux instances en cours d'exécution de votre application pour accomplir une tâche, avant de prendre cette approche.

Voir aussi cette bête noire de programmeur . Empêcher plusieurs utilisateurs d'utiliser la même machine tombe dans la même catégorie;)

En ce qui concerne votre problème de versions multiples. Choisissez un nom unique pour votre mutex l'échelle du système pour toutes les versions (? Majeur) de votre application

Exemple de base avec un Mutex l'échelle du système:

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;
        }

        // ...
    }
}

Le préfixe Global\ rend le mutex partagé sur les sessions de serveur de terminaux multiples. Sans elle, il n'empêcher un utilisateur d'exécuter deux instances de la même session.

Vous devez tester cette approche sur un compte qui a des droits limités, car il pourrait être possible que les comptes restreints ne peuvent pas créer un mutex du tout.

Autres conseils

Voulez-vous l'empêcher de en cours d'exécution deux fois sur le même ordinateur?

Si tel est le cas, la solution peut être assez simple; prendre un mutex de système ou une approche similaire, puis il suffit de vérifier cela et assurez-vous qu'il n'existe pas. Vous pouvez ouvrir une socket, ou autre, pour y parvenir.

Ou voulez-vous arrêter en quelque sorte un compte, autre que celui qui l'a installé, exécuter?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top