添加附件解锁文件

时间:2017-06-15 08:52:45

标签: c# outlook

我需要一些帮助。

我的应用程序适用于Outlook文件。 例如,我有一个 MSG 格式文件存储在我的电脑上。 让我们想象一下,我的PC上没有运行任何Outlook进程。

var myProcess = new Process { ProcessInfo = new ProcessStartInfo {FileName = targetPath}}

其中 targetPath 是我文件的完整路径。 然后我开始处理:

myProcess.Start();

此时Outlook运行在操作系统上。查看TaskManager我看到了这个过程,它是唯一的PID。 还有我的第一个问题:为什么这个PID与 myProcess.Id 不同?

继续前进。我需要检查我的文件是否仍然在Outlook打开。我通过尝试在我的应用程序中打开此文件一段时间来解决此问题。

var iterations = 3600;
while (iterations > 0 ) {
    Thread.Sleep(1000);
    var fInfo = new FileInfo(targetPath);
    FileStream stream = null;
    try {
        stream = fInfo.Open(FileMode.Open, FileAccess.Read | FileAccess.Write, FileShare.None);
    } catch {
        //I expect if exception occurs then file is not lock and can send it to server.
    }
    finally{
        if(stream != null)
        stream.Close();
    }
iteration--;
}

我认为,当我的MSG文件由Outlook使用时,我的应用程序无法打开文件。通过这种方式,我决定不能保存我的文件并将其发送到服务器。但!如果我添加附件但不在Outlook关闭此电子邮件,我的应用程序可以打开此文件。我不明白为什么Outlook更改此文件的读/写属性?我怎么能解决这个问题?

不幸的是,我不知道为什么会这样,以及如何让它发挥作用。

我正在寻找有助于解决我的问题的网上任何信息,但没有结果:(

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

首先,Outlook是一个单例 - 如果你启动一个新的outlook.exe实例,它只会将控制权转移到已经运行的实例并退出。

Outlook内部缓存/引用打开MSG文件,你可以做到这一点。