2010-12-07 33 views
0

Je dois m'assurer qu'il n'y a qu'une seule instance de mon programme en cours d'exécution en même temps. Après quelques recherches j'ai trouvé this SO question et ai suivi les instructions dans this answer. J'ai créé une petite application de test:Lancer mutex TypeInitializationException lorsqu'il est exécuté en tant qu'utilisateur différent en même temps

using System; 
using System.Threading; 

namespace Test 
{ 
    class Program 
    { 
     static Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}"); 

     static void Main(string[] args) 
     { 
      if (mutex.WaitOne(TimeSpan.Zero, true)) 
      { 
       Console.ReadLine(); 
       mutex.ReleaseMutex(); 
      } 
      else 
      { 
       Console.WriteLine("Only one instance allowed"); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

Quand j'exécute le fichier binaire pour la première fois tout est correct et il attend un retour à la sortie. Lorsque je lance l'application la deuxième fois, il est indiqué "Une seule instance autorisée". Jusqu'à présent, tout fonctionne comme prévu. MAIS lorsque je démarre l'application sous un autre utilisateur (RunAs ou en changeant d'utilisateur), elle lance une exception TypeInitializationException. Comment venir? Est-ce que quelqu'un a une solution pour cela?

InnerException: System.UnauthorizedAccessException -> L'accès au chemin "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}" est refusée.

Répondre

1

Regardez la InnerException, qui vous indique ce qui s'est mal passé. Je devinerais à une exception de sécurité.

+0

Mis à jour ma question avec d'autres informations InnerException. – McKembley

+0

Ah, je l'aime quand je pense bien. Mutex.SetAccessControl(). –