我需要一些帮助。
我的应用程序适用于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更改此文件的读/写属性?我怎么能解决这个问题?
不幸的是,我不知道为什么会这样,以及如何让它发挥作用。
我正在寻找有助于解决我的问题的网上任何信息,但没有结果:(
感谢您的时间。
答案 0 :(得分:0)
首先,Outlook是一个单例 - 如果你启动一个新的outlook.exe实例,它只会将控制权转移到已经运行的实例并退出。
Outlook内部缓存/引用打开MSG文件,你可以做到这一点。