在x64系统上使用来自32位应用程序的IFilter

pcu*_*ite 6 c++ full-text-search ifilter

我需要在Windows x64系统上使用32位应用程序的IFilter接口.这对.doc文件很容易,因为offfilt.dll支持两种构建类型.但是,我还需要从.docx和其他文件类型中获取纯文本.解决方案首先是安装Microsoft Filter Pack.但是,只安装x64版本...这意味着我的32位应用程序无法使用它们.它们在32位Windows下运行良好.

有没有人找到解决这个问题的方法?

小智 7

我找到了一种在64位操作系统中安装docx Filter Pack 32bits的方法.其他文件格式类似.

  1. 在32位操作系统中安装32位过滤器包;
  2. 将目录"C:\ Program Files\Common Files\Microsoft Shared\Filters"中的ifilters文件从32位操作系统复制到64位操作系统中的目录"C:\ Program Files(x86)\ Common Files\Microsoft Shared\Filters".
  3. 将以下行复制到文件"ifilter.reg"并执行该文件:

文件内容:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.docx\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_CLASSES_ROOT\.docm\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_CLASSES_ROOT\.dotx\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.docm\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.docx\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.dotx\PersistentHandler]
@="{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}]
@="Office Open XML Format Word Persistent Handler"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}\PersistentAddinsRegistered]

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}\PersistentAddinsRegistered\{89BCB740-6119-101A-BCB7-00DD010655AF}]
@="{5A98B233-3C59-4B31-944C-0E560D85E6C3}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}]
@="Office Open XML Format Word Persistent Handler"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}\PersistentAddinsRegistered]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}\PersistentAddinsRegistered\{89BCB740-6119-101A-BCB7-00DD010655AF}]
@="{5A98B233-3C59-4B31-944C-0E560D85E6C3}"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{5A98B233-3C59-4B31-944C-0E560D85E6C3}\InprocServer32]
@="C:\\Program Files (x86)\\Common Files\\microsoft shared\\Filters\\offfiltx.dll"
"ThreadingModel"="Both"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{5A98B233-3C59-4B31-944C-0E560D85E6C3}\InprocServer32]
@="C:\\Program Files (x86)\\Common Files\\microsoft shared\\Filters\\offfiltx.dll"
"ThreadingModel"="Both"


[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{D3B41FA1-01E3-49AF-AA25-1D0D824275AE}\PersistentAddinsRegistered\{89BCB740-6119-101A-BCB7-00DD010655AF}]
@="{5A98B233-3C59-4B31-944C-0E560D85E6C3}"
Run Code Online (Sandbox Code Playgroud)


小智 1

正如您所发现的,没有支持在 64 位系统上安装 32 位过滤器的方法,请参阅本文末尾附近 MSFT 的回复:How can I install the 32 bit Office Filter Pack on a 64位系统?

那里建议的解决方案是创建一个帮助程序来进行过滤并将数据传递回主应用程序。

在 Windows 中执行 IPC 的方法有多种,因此请选择适合您的一种。我创建了一个服务,它使用 WCF 轻松创建远程代理,使操作对主应用程序非常透明。