用c#启动Outlook

我可以在代码中使用C#启动Outlook吗?

在VB6中,我们使用对象’Outlook.Application’并写:’

Set oOutlook = CreateObject("Outlook.Application") Set oNameSpace = oOutlook.GetNamespace("MAPI") Set oInbox = oNameSpace.Folders(1) 'Set oInbox = oInbox.Folders("Inbox") oInbox.Display 'oOutlook.Quit 'Close All Outlook copies 

复制/粘贴链接: http ://www.ozgrid.com/forum/showthread.php?t = 73886

如果你只想开始outlook; 使用System.Diagnostics.Process是最简单的方法。 🙂

System.Diagnostics.Process只会启动一个进程。

要执行其他操作(如选择文件夹),您需要使用Microsoft Visual Studio Tools for Office(VSTO)。 这是它的参考。 例如:

 var outlook = new Microsoft.Office.Interop.Outlook.ApplicationClass(); outlook.Quit(); 

您可以使用其ProgID来获取类型和激活器

 Type objectType = Type.GetTypeFromProgID("Outlook.Application"); object outlook = Activator.CreateInstance(objectType); 

但是在C#中使用它会丢失所有类型信息(即没有IntelliSense),你需要调用一些丑陋的方法来调用LateBinding的操作(google for Type.Invoke)

其他选项是添加对Microsoft.Office.Interop.Outlook.ApplicationClass的引用,因此您有编译时间类型信息并以通常的方式为Outlook创建实例

 using Microsoft.Office.Interop.Outlook; Microsoft.Office.Interop.Outlook.ApplicationClass outlook = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 

或者您可以使用我的Late Binding Helper库并像这样使用它

 Invoker outlook = BindingFactory.CreateAutomationBinding("Outlook.Application"); outlook.Method("Quit").Invoke(); 

没有Intellisense与这个,但至少库将保存您从丑陋的调用Type.Invoke,并为您提供一个流畅的界面。

这可行(您可能必须更改应用程序将运行的计算机上的路径):

 public static void StartOutlookIfNotRunning() { string OutlookFilepath = @"C:\Program Files (x86)\Microsoft Office\Office12\OUTLOOK.EXE"; if (Process.GetProcessesByName("OUTLOOK").Count() > 0) return; Process process = new Process(); process.StartInfo = new ProcessStartInfo(OutlookFilepath); process.Start(); }