Пример #1
0
        /// <summary>
        /// recursively looks for all folders containing '-dir.info' file, which describe kind of special folder.
        /// "dlls" folders - added to dll search path.
        /// </summary>
        /// <param name="di">directory where scan will be done</param>
        public static void ScanSpecialFolders(DirectoryInfo di)
        {
            var fi = di.GetFiles(BootstrapperDirInfo.fileName).FirstOrDefault();

            if (fi != null)
            {
                try {
                    using (var fs = fi.OpenRead()) {
                        using (var xr = new XmlTextReader(fs)) {
                            var dirInfo = xr.Deserialize <BootstrapperDirInfo>();
                            if (dirInfo.type == "dlls")
                            {
                                if (!Utils.SetDllDirectory(di.FullName))
                                {
                                    log.WriteError(String.Format("failed to set dll search path '{0}'", di.FullName));
                                }
                            }
                        }
                    }
                } catch (Exception err) {
                    log.WriteError(String.Format("failed to deserialize dir.info file with error:{0}", err.Message));
                    dbg.Break();
                }
            }
            foreach (var sdi in di.GetDirectories())
            {
                ScanSpecialFolders(sdi);
            }
        }
Пример #2
0
        public static IEnumerable <SpecialFolderDescription> EnumSpecialFolders(DirectoryInfo di)
        {
            var fi = di.GetFiles(BootstrapperDirInfo.fileName).FirstOrDefault();

            if (fi != null)
            {
                SpecialFolderDescription sfd = null;
                try {
                    using (var fs = fi.OpenRead()) {
                        using (var xr = new XmlTextReader(fs)) {
                            var dirInfo = xr.Deserialize <BootstrapperDirInfo>();
                            sfd = new SpecialFolderDescription {
                                info = dirInfo, directory = di
                            };
                        }
                    }
                } catch (Exception err) {
                    log.WriteError(String.Format("failed to deserialize dir.info file with error:{0}", err.Message));
                    dbg.Break();
                }
                if (sfd != null)
                {
                    yield return(sfd);
                }
            }
            foreach (var sdi in di.GetDirectories())
            {
                foreach (var sfd in EnumSpecialFolders(sdi))
                {
                    yield return(sfd);
                }
            }
        }