我使用Office互操作API打開從Outlook保存的.msg文件,然後顯示答覆窗口以允許用戶回覆它。與Outlook互操作的OpenSharedItem與Office 2003引發奇怪的異常,與Office 2008一起使用
運行Office 2003時,OpenSharedItem(pathToMSGFile);調用拋出以下異常:
Unhandled Exception: System.AccessViolationException: Attempted to read or write
protected memory. This is often an indication that other memory is corrupt.
at Microsoft.Office.Interop.Outlook._NameSpace.OpenSharedItem(String Path)
at OutlookTest.Program.Main(String[] args)
運行Office 2008時,它工作得很好。
我已經把一個小的測試情況下,代碼如下:
static void Main(string[] args)
{
try
{
Application app;
string pathToMSGFile = "\\\\path\\to\\foobar.msg";
if (args.Length > 0)
{
pathToMSGFile = args[0];
}
if (!File.Exists(pathToMSGFile))
{
Console.WriteLine("{0} does not exist.", pathToMSGFile);
return;
}
Console.WriteLine("Opening {0}", pathToMSGFile);
Type olType = Type.GetTypeFromProgID("Outlook.Application", false);
app = Activator.CreateInstance(olType) as Application;
MailItem fld = (MailItem)app.Session.OpenSharedItem(pathToMSGFile);
_MailItem reply = fld.ReplyAll();
reply.Save();
reply.Display(false);
Console.ReadKey();
reply.Close(OlInspectorClose.olDiscard);
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
if (ex.InnerException != null)
{
Console.WriteLine(ex.InnerException.ToString());
}
}
Console.ReadKey();
}
該應用程序的目標是爲.NET 4中,使用OFFICE12互操作庫。無論是爲AnyCPU還是x86編譯,都會發生同樣的情況。
有趣,但我真的不能帶來額外的庫到一個LOB應用程序沒有很大的痛苦。特別是一個不能先審查的封閉源代碼。 – PhonicUK
@PhonicUK我注意到v11互操作庫不包含'OpenSharedItem()'方法。它可以從Office 12版本開始使用。此操作在Office 11/2003中是否無法使用(通過interop)? – Sepster
這似乎確實是問題。如果您想以此作爲答案,我會接受它。 – PhonicUK