【问题标题】:Locate all .pst files找到所有 .pst 文件
【发布时间】:2017-02-05 21:32:55
【问题描述】:

您好

我在定位 .pst 文件时遇到问题。 **

任务

** 是查找机器上的所有 .pst 文件并创建它们的列表。

我尝试使用注册表项:“HKCU\Software\Microsoft\Office\%OfficeVersion%\Outlook\Search\Catalog”。看起来它包含所有 .pst 和 .ost 文件的列表,但结果它也有已删除(或移动)文件的条目,并且只有在您连接时才会更新。在 Outlook 中手动设置 pst。因此,如果您将旧的 .pst 移动到某种“存档”中,我的注册表将不会包含有关它的信息。

我知道浏览所有文件需要花费太多时间,所以我想避免这种情况。

另外,请记住,用户可能有很多邮箱和很多 .pst(其中一些甚至可能根本没有连接到 Outlook)。而且我不能使用诸如救赎之类的东西。只是普通的 C#(可能是一些 C++ MAPI 库)

非常感谢。

【问题讨论】:

  • 您是否要搜索整个系统中的 pst 文件?
  • @skjoshi 是的,这就是任务。搜索所有 pst 文件。
  • 我只能看到文件搜索的可能性,但是由于 pst 文件存储在用户目录中,您将遇到安全问题。

标签: c# outlook mapi


【解决方案1】:

PST 文件位置存储在注册表的配置文件部分中。官方支持的用于访问和操作配置文件数据的 API 是 IProfAdmin 接口(如果单击 IProfAdmin 按钮,您可以在 OutlookSpy 中使用它)。 PST 路径存储在 PR_PST_PATH 属性中。扩展 MAPI 只能从 C++ 或 Delphi 访问。

配置文件数据存储在注册表中,因此理论上您可以从注册表中读取数据,但键名是配置文件特定的并且是随机生成的(配置文件部分名称是一个 guid)。另请注意,注册表中的配置文件数据位置是特定于 Outlook 版本的。

你可以使用ProfMan(它带有Redemption的可分发版本); ProfMan 可用于任何语言。以下脚本 (VB) 从所有本地配置文件中检索 PST 文件名:

'Print the path to all the PST files in all profiles
 PR_PST_PATH = &H6700001E

 set Profiles=CreateObject("ProfMan.Profiles")
 for i = 1 to Profiles.Count
   set Profile = Profiles.Item(i)
   set Services = Profile.Services
   Debug.Print "------ Profile: " & Profile.Name & " ------"
   for j = 1 to Services.Count
     set Service = Services.Item(j)
     If (Service.ServiceName = "MSPST MS") or (Service.ServiceName = "MSUPST MS") Then
      MsgBox Service.Providers.Item(1).ProfSect.Item(PR_PST_PATH)
     End If
   next
 next

您还可以使用 Outlook 对象模型从 PST 存储中检索 PST 文件名(但这需要运行 Outlook,并且您只能对当前使用的配置文件执行此操作)- 使用 Store.FilePath 属性:

set vApp = CreateObject("Outlook.Application")
for each vStore in vApp.Session.Stores
  MsgBox vStore.DisplayName & " - " & vStore.FilePath
next

【讨论】:

  • 感谢您提供如此好的答案。我尝试使用 Store.FilePath 属性。首先,它说有3个商店,第一个是.ost,文件路径是正确的。但其他 2 家商店的文件路径值为空。这是为什么??谢谢
  • 好的,我刚刚创建了一个新的 .pst 存档并尝试使用 Oulook 对象模型,它工作得恰到好处。现在我将检查 store 是否为空。我认为获取附加的 .pst 列表现在可以使用。非常感谢
  • 请记住,Store.FilePath 仅适用于 Outlook 中使用的活动配置文件,该配置文件必须正在运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 2010-09-16
  • 2012-07-26
  • 2011-12-23
  • 1970-01-01
相关资源
最近更新 更多