我有一个用Delphi编写的IFilter,我正试图在64位Windows7桌面搜索下工作。
由于它是用Delphi开发的,所以我只能将其编译为32位DLL。
为了解决这个问题,我正在尝试用Visual C++编写一个64位的IFilter动态链接库,它在内部使用我的32位IFilter Com对象,使用概述的DllSurogate技术here。
我已经在一个测试64位的控制台应用程序下让所有这些工作正常。我可以创建64位包装器的一个实例,它在内部创建32位IFilter对象并将所有调用委托给它。然后,我可以检索我的文档的内容。
问题是,当我在WDS中注册时,64位包装器不能再创建32位对象。CoCreateInstance返回‘服务器执行失败’(CO_E_SERVER_EXEC_FAILURE)。
这就是我在64位包装器旁边创建32位对象的对象
result = CoCreateInstance(clsid, 0, CLSCTX_LOCAL_SERVER , IID_IFilter, (LPVOID*)&m_pFilter);知道为什么会发生这种事吗。这是WDS中IFilters的权限限制吗?
谢谢你在这方面的帮助。
发布于 2010-09-29 05:13:30
是的。IFilters在一个名为SearchFilterHost.exe的宿主进程中运行。由于筛选器可能会打开包含恶意内容的文件,因此主机以非常有限的权限运行。启动进程的能力肯定不会包括在内。不知道如何覆盖它,也不知道您是否应该考虑这样做。在谷歌上搜索"searchfilterhost.exe“就会弹出很多警钟。那一定是个令人痛苦的消息,很抱歉成为了搬运工。
发布于 2010-09-29 20:38:00
还请记住,调用应用程序不需要在每次使用后卸载你的ifilter。它将重用内存中的ifilter来解析许多文件。但是,如果主机进程检测到问题(例如内存泄漏越来越严重),它将卸载ifilter并重试。几年前,我在32位上使用过ifilter代码,但我还没能解决64位上更严格的限制。如果你发现这是如何做到的,我希望你愿意在网上张贴细节……
https://stackoverflow.com/questions/3816985
复制相似问题