备份outlook的pst文件

 

备份outlook的pst文件的时候,遇到了一些问题,总结了一下。

 

要得outlook的pst文件的路径,先使用Outlook自带的.net COM组件,但最终发现该组件对于Outlook 2007以上的版本才提供了获得pst路径的方法,但程序要支持Outlook2003,所以就放弃了此办法。于是改用MAPI。

 

主程序是C#程序集, MAPI则是非托管的一套API,虽然C#代码可以访问MAPI的函数,但对于一些其中的COM接口,则没有想到好的办法访问,需要用托管的C++代码封装这些接口,这样会多出一个都来了,既然总要多出一个dll,于是索性用用非托管的C++代码生成一个名为MAPIWrapper.dll,该dll封装了对MAPI的操作,导出一些需要的函数,然后主程序中用C#代码封装这些C函数来调用。

 

注:之所以用非托管的C++代码做一个dll,是因为需要的这些功能都在我们的软件的以前的版本里实现了,代码可以直接移植过来用。而且该功能要得也紧。

 

问题一:

C#工程编译时,选择的platform target是Any CPU,生成的程序集可以运行在32位和64位系统上都没问题。但是MAPIWrapper只生成了Win32一个类型的dll。在64位系统上运行的时候,C#程序集就无法加载该dll,因为64位的程序无法加载32位的dll,反之亦然。

 

解决办法:

在vs2010里,可以添加x64的编译选项,生成64位的dll,在64位系统上安装程序的时候,会拷贝64位dll,32位系统则拷贝32的dll。

 

问题一解决了,但新的问题又来了。

 

问题二:

在64位系统上主程序会加载64位的MAPIWrapper.dll,64位的MAPIWrapper.dll会加载64位的mapi32.dll(别看名字里有个32,但其实是64位的dll,名字是那样是为了兼容性)来访问系统上安装的outlook的信息。但当该64位的系统上安装的是32位的outlook的话,64位的mapi32.dll不能获得32位outlook的信息,此时会弹出下面对话框:

 

 

显然,mapi32.dll认为outlook不是默认邮件系统客户端(如果没有安装outlook也会弹出此对话框)。因此,最终程序无法通过64位(或32位)MAPIWrapper.dll获得32位(或64位)的outlook的pst路径。

 

解决办法:

现在的做法是新增OutlookHelper工程,通过生成的OutlookHelper.exe和OutlookHelper64.exe来获得32位和64位的outlook的pst路径。将得到的pst路径存储到一个临时文件中,然后主程序等待OutlookHelper(64).exe执行完之后从临时文件里读取pst路径,最后删除临时文件。临时文件的文件名又主程序通过命令行传给OutlookHelper(64).exe。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值