我最近发现,Windows 系统还原会监控大量文件扩展名,执行系统还原时,所有文件扩展名都会被恢复或删除。这些扩展名在许多情况下与其他程序相关联,恢复可能会导致不一致或数据丢失。
就我而言,我意识到了这种行为是因为 MySql 用于存储表数据的一些 *.idb 文件在恢复过程中被删除了。
和快速搜索我发现扩展列表无法以任何方式编辑,并且使用注册表项排除文件FilesNotToSnapshot
不是一个可行的解决方案,因为在这种情况下它们将被彻底删除,就像从未存在过一样。
然而,有一些程序可用于恢复上一个版本并还原它,但要做到这一点,我应该知道已经执行了系统恢复。
我可以检查是否执行了系统还原吗,是否存在注册表变量或我可以使用自定义程序监控的东西?
答案1
这可能不是最好的解决方案,但它满足我的需要。
在 Windows 应用程序事件日志中,有一些与系统还原点相关的事件,ID 8202 与从还原点成功执行的还原相关。
我编写了一个小程序,并将其设置为在启动时运行,以读取事件日志并检查事件 8202。它将上一个 8202 事件的日期与之前存储的本地 txt 文件的日期进行比较。如果日期不同,程序窗口保持打开状态,否则关闭。每次手动关闭窗口时,存储的日期都会更新。
读取事件日志的相关代码如下
//init log reader
string eventLogName = "Application";
eventLog = new EventLog();
eventLog.Log = eventLogName;
// read events and store relevant ones in a local variable
List<EventLogEntry> entries = new List<EventLogEntry>();
foreach (EventLogEntry log in eventLog.Entries)
{
if (log.EventID != 8202)
{
continue;
}
entries.Add(log);
}
然后我检查entries
变量的内容。
我仅针对手动启动的还原点进行了测试,它已完成了其工作。
请注意,如果程序存储在受监控的磁盘中,则在添加后应手动创建还原点,否则第一次还原将删除它,因为“exe”是受监控的扩展名。