private void AddPath(WatcherConfiguration watcherConfiguration) { if (watcherConfiguration == null) { throw new ArgumentNullException("watcherConfiguration"); } try { FileSystemWatcher watcher; string path; string filter; if (File.Exists(watcherConfiguration.Path)) { path = Path.GetDirectoryName(watcherConfiguration.Path); Debug.Assert(path != null); filter = Path.GetFileName(watcherConfiguration.Path); } else if (Directory.Exists(watcherConfiguration.Path)) { path = watcherConfiguration.Path; filter = watcherConfiguration.Filter; } else { Logger.Log(new FileEventArgs() { ChangeType = WatcherChangeTypes.Deleted, Date = DateTime.Now, FullPath = watcherConfiguration.Path }); return; } if (string.IsNullOrWhiteSpace(filter)) { watcher = new FileSystemWatcher(path); } else { watcher = new FileSystemWatcher(path, filter); } watcher.IncludeSubdirectories = watcherConfiguration.IncludeSubdirectories; watcher.Changed += Watcher_Changed; watcher.Created += Watcher_Changed; watcher.Deleted += Watcher_Changed; watcher.Error += Watcher_Error; watcher.Renamed += Watcher_Renamed; watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size; watcher.EnableRaisingEvents = true; _watchers.Add(watcher); } catch (IOException ex) { Logger.Log(ex); } catch (Exception ex) { Logger.Log(ex); } }
public void Load(bool lockConfigurationFile) { try { _stream = new FileStream(GetConfigurationPath(), FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan); XmlDocument doc = new XmlDocument(); doc.Load(_stream); X509Certificate2 certificate = null; if (XmlHelpers.HasSignature(doc) && !XmlHelpers.VerifySignature(doc, out certificate)) { throw new Exception("Invalid Signature"); } // Find Certificate if (certificate != null) { X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); try { X509Certificate2 x509Certificate2 = new X509Certificate2(certificate); X509Certificate2Collection x509Certificate2Collection = store.Certificates.Find(X509FindType.FindByThumbprint, x509Certificate2.Thumbprint, false); foreach (X509Certificate2 certificate2 in x509Certificate2Collection) { Certificate = certificate2; break; } } finally { store.Close(); } } var xmlNodeList = doc.SelectNodes("//Watcher"); foreach (XmlNode node in xmlNodeList) { WatcherConfiguration watcherConfiguration = new WatcherConfiguration(); watcherConfiguration.Path = XmlUtilities.GetAttribute(node, "path", (string)null); watcherConfiguration.Filter = XmlUtilities.GetAttribute(node, "filter", (string)null); watcherConfiguration.IncludeSubdirectories = XmlUtilities.GetAttribute(node, "includeSubdirectories", false); var md5 = XmlUtilities.GetAttribute(node, "md5", (string)null); if (md5 != null) { watcherConfiguration.Md5 = Convert.FromBase64String(md5); } var sha1 = XmlUtilities.GetAttribute(node, "sha1", (string)null); if (sha1 != null) { watcherConfiguration.Sha1 = Convert.FromBase64String(sha1); } Watchers.Add(watcherConfiguration); } } finally { if (!lockConfigurationFile && _stream != null) { _stream.Dispose(); _stream = null; } } }