2010-11-30 7 views
15

Estoy tratando de crear un named mutex, pero cuando llamo al constructor obtengo un DirectoryNotFoundException! ¿Por qué un mutex intenta acceder al sistema de archivos y cómo sé cuál es una ruta válida? ¿Hay algún directorio en particular en el que se deba colocar el mutex y cómo se corresponde con el nombre?La creación de un Mutex arroja una excepción DirectoryNotFoundException

EDIT: Estoy usando la sobrecarga Mutex(bool, string), y la excepción es:

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

Lo constructor ¿Está utilizando, y cuáles son los detalles de la excepción? –

+0

Yikes. Esta pregunta se publicó hace 15 minutos y ya es el segundo resultado en una búsqueda en Google de "mutex directorynotfoundexception". Eso es rápido rastreo. – Wyzard

+0

Posible duplicado del error ["No se pudo encontrar una parte de la ruta" al crear Mutex] (https://stackoverflow.com/questions/20714120/could-not-find-a-part-of-the-path-error -while-creating-mutex) –

Respuesta

16

Ah, conocer cuál era el problema. Mi nombre mutex tenía \, que Windows interpretaba como un carácter de ruta. Duración:

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

soluciona el problema

+6

Sugiero reemplazar cualquier instancia de cualquiera de los caracteres de ['Path.GetInvalidPathChars'] (http://msdn.microsoft.com/en-us/library/system.io.path. getinvalidpathchars.aspx) (por ejemplo '/' tampoco es válido). – Richard

+4

No es realmente un carácter de ruta, [hay una explicación completa aquí] (http://stackoverflow.com/a/20714164/1729885). Todos los caracteres, excepto la barra invertida, son válidos debido a los espacios de nombres de objeto Kernel. –

Cuestiones relacionadas