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); }
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); }
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); }