2010-06-07 5 views
0

je veux faire en sorte que seule instance de exécution de l'application ...comment faire l'application singleton

i ajouté la vérification des mutex, mais il provoque des problèmes dans le système 64 bits. la deuxième manière est de rechercher la table de processus. Cette vérification peut être facilement défaite en renommant l'application. s'il vous plaît dites-moi comment vous assurer qu'une seule instance d'application s'exécute.

code suivant est utilisé pour mutex

bool createdNew = true; 
using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew)) 
{ 
if (createdNew) 
{ 
Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new MainForm()); 
} 

le problème avec cela sur XP 64 bits après 2 ou 3 minutes, il génère StackOverflowExcpetion et provoque mon application crash .. i a été testée et est venu à fond pour résultat que l'utilisation de mutex est la cause de ce problème

+1

Quels sont les problèmes causés par le Mutex? – Femaref

+0

Exécutez votre code dans un débogueur et regardez la pile d'appels. – SLaks

+0

Copie possible de [Quelle est la manière correcte de créer une application à instance unique?] (Http://stackoverflow.com/questions/19147/what-is-the-correct-way-to-create-a-single- instance-application) – user

Répondre

1

Les mutex devraient fonctionner correctement sur les systèmes 64 bits.
S'il vous plaît nous montrer votre code.

Alternativement, vous pouvez utiliser le WindowsFormsApplicationBase class dans Microsoft.VisualBasic.dll (qui est utilisable depuis C#), qui l'implémente déjà pour vous.

Pour l'utiliser, définissez le IsSingleInstance property à true, définissez la propriété MainForm à votre formulaire, puis appelez Run.

1

L'utilisation de mutex est la bonne façon, en cherchant la table de processus la mauvaise. Vous devez avoir des erreurs dans votre code si mutex ne fonctionne pas pour vous. Pourriez-vous poster les parties de code valides?