当前位置: 首页 > 编程语言 > C#

以编程方式确定安装了哪些iFilter分享

时间:2023-04-10 23:12:25 C#

C#学习教程:以编程方式确定安装了哪些iFilters因此,我们喜欢使用Foxit的那个。问题是,如果我们安装FoxitiFilter然后客户端决定重新安装Adob??eReader,它可能会覆盖FoxitiFilter。我们可以使用IFilterExplorer等工具来查看它,但我想在应用程序中执行此操作并警告用户/客户端iFilter已更改。有没有办法从代码(C#)检查iFilters?或者这个问题的其他潜在解决方案?由于foxitIFilter实现了IPersistStream接口,我想你可以尝试从IFilter中获取这个接口,并查询它的CLSID看它是否来自foxit。FoxitIFilter的CLSID为{987f8d1a-26e6-4554-b007-6b20e2680632},即IFilterExplorer中的“PersistentHandlersAddinsRegistered”栏。Adobe的IFilter好像没有实现这个接口。我希望IFilter存储在注册表中,这样您就可以使用ProcessMonitor查看IFilterExplorer正在检查哪些键。然后检查MSDN是否与文档一致。然后使用.NET的注册表类型在您的应用程序中执行相同的操作。基于寻找这个答案,注册表可以存在于系统和用户级别,因此您可能需要枚举多个注册表项。一个奇怪的答案;)但作为替代方案,您可以使用Windows7SDK中的外部控制台应用程序Filtreg.exe将此作业委托给它。我正在使用这个小功能来制作列表。它只使用扩展名而不使用文档类型!在大多数情况下,这很好,可以在此处轻松更改。以上就是C#学习教程:编程判断安装了哪些iFilters,分享全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——//////实现一个Function,获取本系统当前注册的所有可用IFilter///publicstringGetFilterList(){//我们的结果字符串。我们回馈一个';'单独的扩展名列表。字符串结果=@"";字符串persistentHandlerClass;RegistryKeyrk=Registry.LocalMachine.OpenSubKey(@"SoftwareClasses");如果(rk==null)返回null;using(rk){foreach(stringsubKeyNameinrk.GetSubKeyNames()){if(subKeyName[0]=='.')//可能的扩展{RegistryKeysk=Registry.LocalMachine.OpenSubKey(@"SoftwareClasses"+subKeyName+@"PersistentHandler");如果(sk==null)继续;使用(sk){persistentHandlerClass=(string)sk.GetValue(null);}if(persistentHandlerClass!=null){stringfilterPersistClass=ReadStrFromHKLM(@"SoftwareClassesCLSID"+persistentHandlerClass+@"PersistentAddinsRegistered{89BCB740-6119-101A-BCB7-00DD010655AF}");海峡ingdllName=ReadStrFromHKLM(@"SoftwareClassesCLSID"+filterPersistClass+@"InprocServer32");//跳过query.dll结果,因为它本身不是IFilterif(dllName!=null&&filterPersistClass!=null&&(dllName.IndexOf("query.dll")本文收集自网络,不代表立场.如涉及侵权,请点击维权联系管理员删除,如需转载请注明出处: