public void Merge_Workaround() { var protectedPath = @"c:\test.txt"; var processPath = @"c:\knownproc.exe"; // Fill the ruleset. var ruleset = new Ruleset(); var c = ruleset.Categories.AddCategoriesRow("TestCategory", new byte[] { }, string.Empty); var i = ruleset.Items.AddItemsRow("TestItem", null, c); var path = ruleset.Paths.AddPathsRow(protectedPath); var proc = ruleset.Processes.AddProcessesRow(processPath); var rule = ruleset.Rules.AddRulesRow("TestRule", RuleAction.Ask, false, path, proc, i); ruleset.AcceptChanges(); Assert.IsNull(ruleset.GetChanges()); // Copy ruleset. var ruleset2 = (Ruleset)ruleset.Copy(); // To some changes to ruleset2. ruleset2.Rules[0].Log = false; // Get pure list of changes. ruleset2.Relations.Clear(); // <=== This is exactly workaround. ruleset2.EnforceConstraints = false; // <=== This is exactly workaround. var changes = ruleset2.GetChanges(); Assert.IsNotNull(changes); ruleset.Merge(changes, true); Assert.IsFalse(ruleset2.Rules[0].Log); }
private static void SetupRules(Ruleset ruleset) { var benchmarkProcess = ruleset.Processes.FindByPath(Application.ExecutablePath); if (benchmarkProcess == null) { benchmarkProcess = ruleset.Processes.AddProcessesRow(Application.ExecutablePath); } var category = ruleset.Categories.FindByName("Benchmark"); if (category == null) { category = ruleset.Categories.AddCategoriesRow("Benchmark", null, string.Empty); } var item = ruleset.Items.GetItemsRow("Benchmark", "Benchmark"); if (item == null) { item = ruleset.Items.AddItemsRow("Benchmark", null, category); } var deleteList = new List <Ruleset.RulesRow>(); foreach (Ruleset.RulesRow rule in ruleset.Rules) { if (rule.Name.StartsWith("Benchmark rule #")) { deleteList.Add(rule); } } foreach (var rule in deleteList) { rule.Delete(); } for (int i = 0; i < ruleset.Paths.Count; i++) { var path = ruleset.Paths[i]; ruleset.Rules.AddRulesRow("Benchmark rule #" + i, RuleAction.Allow, false, path, benchmarkProcess, item); } ruleset.AcceptChanges(); ruleset.WriteXml("ruleset.xml"); }
protected override void OnStop() { try { AsyncCore.Instance.Stop(); // Save the ruleset back to file. _Ruleset.AcceptChanges(); _Ruleset.WriteXml(_DefaultRulesetPath); } catch (Exception ex) { EventLog.WriteEntry("APService", "On stop. " + BugSubmitter.FormatErrorMessage(ex), EventLogEntryType.Error); throw; } EventLog.WriteEntry("APService", "Service successfully stopped."); }
protected override void OnStart(string[] args) { try { if (File.Exists(_DefaultRulesetPath) == false) { throw new FileNotFoundException("Ruleset file not found (" + _DefaultRulesetPath + ")"); } _Ruleset = new Ruleset(); _Ruleset.ReadXml(_DefaultRulesetPath); _Ruleset.AcceptChanges(); var serviceInterface = ServiceInterface.Marshal(_Ruleset); AsyncCore.Instance.Start(_Ruleset, serviceInterface, new EventLog("APAccess", ".", "APLogger")); } catch (RemotingException ex) { var registeredChannels = string.Format("\r\n******Registered channels({0})*****\r\n", ChannelServices.RegisteredChannels.Length); foreach (var channel in ChannelServices.RegisteredChannels) { registeredChannels += channel.ChannelName + "\r\n"; } EventLog.WriteEntry("APService", "On start. " + BugSubmitter.FormatErrorMessage(ex) + registeredChannels, EventLogEntryType.Error); throw; } catch (Exception ex) { EventLog.WriteEntry("APService", "On start. " + BugSubmitter.FormatErrorMessage(ex), EventLogEntryType.Error); throw; } EventLog.WriteEntry("APService", "Service successfully started.", EventLogEntryType.Information); }