2010-11-30 43 views
15

J'essaye de créer un named mutex, mais quand j'appelle le constructeur j'obtiens un DirectoryNotFoundException! Pourquoi un mutex essaie-t-il d'accéder au système de fichiers, et comment puis-je savoir ce qu'est un chemin valide? Y at-il un répertoire particulier où le mutex devrait être placé, et comment cela correspond-il au nom?Création d'un Mutex throws une exception DirectoryNotFoundException

EDIT: J'utilise la surcharge Mutex(bool, string), et l'exception est:

System.IO.DirectoryNotFoundException: Could not find a part of the path '<mutex name>'. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.Threading.Mutex.<>c__DisplayClass3.<.ctor>b__0(Object userData) 
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew, MutexSecurity mutexSecurity) 
at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name) 
+1

Quel constructeur utilisez-vous, et quels sont les détails de l'exception? –

+0

Yikes. Cette question a été postée il y a 15 minutes et déjà c'est le deuxième résultat d'une recherche Google pour "mutex directorynotfoundexception". C'est rapide. – Wyzard

+0

Copie possible de l'erreur ["Impossible de trouver une partie du chemin" lors de la création de Mutex] (https://stackoverflow.com/questions/20714120/could-not-find-a-part-of-the-path-error -while-creation-mutex) –

Répondre

16

Ah, trouvé quel était le problème. Mon nom de mutex contenait \, que Windows interprétait comme un caractère de chemin. Exécution:

mutexName = mutexName.Replace(Path.DirectorySeparatorChar, '_'); 

résout le problème

+6

Je suggère de remplacer toutes les instances de l'un des caractères de ['Path.GetInvalidPathChars'] (http://msdn.microsoft.com/en-us/library/system.io.path. getinvalidpathchars.aspx) (par exemple '/' est également invalide). – Richard

+4

Ce n'est pas vraiment un caractère de chemin, [il y a une explication complète ici] (http://stackoverflow.com/a/20714164/1729885). Tous les caractères sauf la barre oblique inverse sont valides, à cause des espaces de noms d'objets du noyau. –