Example #1
0
        private static Dictionary <string, PathEntry> GetLocalServices(bool withChildren)
        {
            return(LocalServicesCache.GetOrAdd(withChildren, wChildren =>
            {
                var logFilesServices = DiscoveryService.GetLocalRegisteredServices("LOG.FILE");
                var logHttpServices = DiscoveryService.GetLocalRegisteredServices("LOG.HTTP");
                var traceFilesServices = DiscoveryService.GetLocalRegisteredServices("TRACE.FILE");
                var statusHttpServices = DiscoveryService.GetRegisteredServices("STATUS.HTTP");
                var statusFilesServices = DiscoveryService.GetLocalRegisteredServices("STATUS.FILE");

                var appNames = traceFilesServices.Select(ts => ts.ApplicationName).ToArray();

                if (Core.Settings["ImportRemoteAssemblies"].ParseTo(false) && Core.Settings["ImportRemoteAssembliesPath"] != null)
                {
                    var folderServices = DiscoveryService.GetLocalRegisteredServices("FOLDERS");
                    var folderServicesData = folderServices
                                             .Where((s, names) => names.Contains(s.ApplicationName) && s.ApplicationName != Core.ApplicationName, appNames)
                                             .Select(s => s.Data.GetValue() is string[] strArray ? strArray[0] : null)
                                             .ToArray();

                    var destinationPath = Core.Settings["ImportRemoteAssembliesPath"];
                    foreach (var path in folderServicesData)
                    {
                        var localExeFiles = Directory.EnumerateFiles(path, "*.exe", SearchOption.AllDirectories);
                        var localDllFiles = Directory.EnumerateFiles(path, "*.dll", SearchOption.AllDirectories);
                        var localFiles = localExeFiles.Concat(localDllFiles);
                        foreach (var file in localFiles)
                        {
                            try
                            {
                                var name = AssemblyName.GetAssemblyName(file);
                                if (AssemblyResolver.IsExcludedAssembly(name.Name))
                                {
                                    continue;
                                }
                                var destinationFile = Path.Combine(destinationPath, Path.GetFileName(file));
                                if (!System.IO.File.Exists(destinationFile))
                                {
                                    System.IO.File.Copy(file, destinationFile);
                                }
                            }
                            catch (BadImageFormatException)
                            {
                                //
                            }
                            catch (Exception)
                            {
                                //
                            }
                        }
                    }

                    var asmResolver = AssemblyResolverManager.GetAssemblyResolver();
                    asmResolver?.AppendPath(destinationPath);
                }
Example #2
0
        private Assembly[] DefaultGetAllAssemblies()
        {
            var resolver = AssemblyResolverManager.GetAssemblyResolver();

            if (!AllAssembliesLoaded || (!_usedResolver && resolver != null))
            {
                if (resolver != null)
                {
                    _usedResolver = true;
                }
                else
                {
                    var loaded = new HashSet <string>(AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName().FullName));
                    foreach (var file in Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll", SearchOption.TopDirectoryOnly).AsParallel())
                    {
                        try
                        {
                            var name = AssemblyName.GetAssemblyName(file);
                            if (loaded.Contains(name.FullName))
                            {
                                continue;
                            }
                            if (IsExcludedAssembly(name.Name))
                            {
                                continue;
                            }
                            AppDomain.CurrentDomain.Load(name);
                        }
                        catch
                        {
                            // ignored
                        }
                    }
                }
                AllAssembliesLoaded = true;
                _assemblies         = null;
                return(DefaultGetAssemblies());
            }
            return(_assemblies);
        }
Example #3
0
        private Assembly[] DefaultGetAllAssemblies()
        {
            var resolver = AssemblyResolverManager.GetAssemblyResolver();

            if (!AllAssembliesLoaded || (!_usedResolver && resolver != null))
            {
                if (resolver != null)
                {
                    _usedResolver = true;
                }
                else
                {
                    var loaded = AppDomain.CurrentDomain.GetAssemblies();
                    foreach (var file in Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll", SearchOption.TopDirectoryOnly))
                    {
                        try
                        {
                            var name = AssemblyName.GetAssemblyName(file);
                            if (IsExcludedAssembly(name.Name))
                            {
                                continue;
                            }
                            if (loaded.All((l, fullName) => l.FullName != fullName, name.FullName))
                            {
                                AppDomain.CurrentDomain.Load(name);
                            }
                        }
                        catch
                        {
                            // ignored
                        }
                    }
                }
                AllAssembliesLoaded = true;
                _assemblies         = null;
                return(DefaultGetAssemblies());
            }
            return(_assemblies);
        }