private static String GetAbsolutePath(String path, String paramName,
                                       out MessageListenerException exception)
 {
     exception = null;
     try
     {
         path = Path.GetFullPath(path);
     }
     catch (ArgumentException ex)
     {
         exception = new MessageListenerException("Parameter '" + paramName + "' is invalid.", ex);
     }
     catch (System.Security.SecurityException ex)
     {
         exception = new MessageListenerException("No permission to get absolute path.", ex);
     }
     catch (NotSupportedException ex)
     {
         exception = new MessageListenerException("Path format in parameter '" + paramName
                                                  + "' is not supported.", ex);
     }
     catch (PathTooLongException ex)
     {
         exception = new MessageListenerException("Path in parameter '" + paramName
                                                  + "' is too long.", ex);
     }
     return(path);
 }
        public static void SetConfigPath(String path, String baseDir)
        {
            bool isAbsolute = false;

            try
            {
                isAbsolute = Path.IsPathRooted(path);
            }
            catch (ArgumentException ex)
            {
                throw new MessageListenerException("Parameter 'path' is invalid.", ex);
            }
            if (isAbsolute || //To add volume/drive to the rooted path if necessary.
                String.IsNullOrEmpty(baseDir))    //If baseDir is null, path relative to the current working dir
            {
                MessageListenerException ex = null;
                path = GetAbsolutePath(path, "path", out ex);
                if (ex != null)
                {
                    throw ex;
                }
                ConfigPath = path;
                return;
            }

            isAbsolute = false;
            try
            {
                isAbsolute = Path.IsPathRooted(baseDir);
            }
            catch (ArgumentException ex)
            {
                throw new MessageListenerException("Parameter 'baseDir' is invalid.", ex);
            }
            if (!isAbsolute)
            {
                throw new MessageListenerException("Parameter 'baseDir' must be absolute.");
            }
            MessageListenerException exc = null;

            baseDir = GetAbsolutePath(baseDir, "baseDir", out exc); //To add volume/drive to the path if necessary
            if (exc != null)
            {
                throw exc;
            }
            baseDir = baseDir.Replace('\\', '/');
            if (!baseDir.EndsWith("/"))
            {
                baseDir += "/";
            }
            Uri baseUri = new Uri(baseDir.StartsWith("/") ? "file:" + baseDir : "file:///" + baseDir);

            path = path.Replace('\\', '/');
            Uri uri;

            try
            {
                uri = new Uri(baseUri, path);
            }
            catch (Exception ex)
            {
                throw new MessageListenerException("Combination 'baseDir' and 'path' yields invalid path.", ex);
            }
            ConfigPath = uri.AbsolutePath;
        }