好的,我试着解释一下这个问题。
我编写了一个Outlook扩展程序,将Mails,Task等与ERP系统相匹配。
它工作正常,但我有1个问题:
我将所有可以映射到ERP客户,Suplliers等的Outlook元素保存在ERP系统的文档数据库中。因此,每个项目/团队成员都可以打开最新版本的Outlook项目。
用户第一次打开项目时,每件事都没问题,第二次无法打开文件,因为它已在Outlook中打开。
我知道Outlook“保存”每个msg文件的临时项目,但我无法释放该对象。
我不想退出Outlook我只是想在关闭后释放msg文件,以便用户可以在不关闭Outlook的情况下重新打开它。
但是我没有找到一种方法来释放它而不会打电话给Quit。
或者是否有重新显示当前结果项的选项?在片刻我不知道如何引用已经打开的msg文件。
我认为建立这些项目的词典非常沉重。
@SuperBiasedMan - 当然,到目前为止我尝试了两种方法:
// 1. Just open File in corresponding Viewer
System.Diagnostics.Process.Start([PathToMsgFile]);
// 2. Using SharedItem Method to get an item Object
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
var item = app.Session.OpenSharedItem([PathToMsgFile]) as Microsoft.Office.Interop.Outlook.MailItem;
item.Display();
如果项目按预期显示,当用户关闭此文件并尝试重新打开它(不重新启动Outlook)时,用户会收到错误消息:
“无法打开文件:[PathToMsgFile] .msg。该文件可能不存在,您可能没有权限打开它,或者它可能在另一个程序中打开。右键单击包含该文件的文件夹,然后单击“属性”以检查文件夹的权限。“
Outlook保持项目打开。 我发现释放它的唯一方法是致电:
app.Quit();
讨论(参见上面的链接)结论是Outlook在打开Msg文件时“保存”临时Outlook元素。我搜索关闭/删除/释放或任何此临时对象的可能性或重新打开它而不重新启动Outlook
@Dmitry:该文件来自远程计算机