2009-05-05 63 views
5

¿Puedo hacer que C# inicie Outlook en el código?Inicie Outlook con C#

En VB6 usamos 'Outlook.Application' y escribir el objeto:'

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 

Copiar/Pegar enlace: http://www.ozgrid.com/forum/showthread.php?t=73886

Respuesta

4

Si lo que desea es comenzar las perspectivas; usar System.Diagnostics.Process sería la forma más fácil. :)

+0

Creo que va a trabajar :). ¡Gracias! – jeje1983

+0

No se aplica realmente al código en la pregunta, pero está bien –

7

System.Diagnostics.Process solo se iniciará un proceso.

Para realizar acciones adicionales, tales como elegir carpetas, debe usar Microsoft Visual Studio Tools para Office (VSTO). Y here es su referencia. Por ejemplo:

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

Me dicen que al usar la interoperabilidad de Office, nunca use las clases XXXClass. Creo que te refieres var outlook = new Microsoft.Office.Interop.Outlook.Application(); – foson

+0

Gracias! Opinión muy interesante. ¿Sabes por qué? ¿No usas? Tengo una aplicación con procesamiento de datos Excel-to-Excel complejo donde hay muchas clases de Excel.ApplicationClass. ¡Todo funciona absolutamente correctamente! También http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.application.aspx es una interfaz, ¿no? – abatishchev

+1

Usar la aplicación funciona si Outlook ya se está ejecutando pero no invocará una nueva instancia de Outlook. Tuve que usar ApplicationClass que usará una instancia existente o invocará una nueva instancia si es necesario. – Damien

4

Usted podría utilizar su identificador de programa para obtener el tipo y el activador

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

Pero el uso de esto en C#, perderá toda la información de tipo (es decir, sin IntelliSense) y hay que llamar un método feo para invocar las operaciones con LateBinding (google para Type.Invoke)

Otra opción es agregar una referencia a Microsoft.Office.Interop.Outlook.ApplicationClass, por lo que tiene información de tipo de tiempo de compilación y crear una instancia para Outlook de la manera habitual

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

O usted podría utilizar mi biblioteca Late Binding Helper y utilizar de esta manera

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

Sin Intellisense con éste, pero por lo menos la biblioteca que va a salvar de las llamadas feas a Type.Invoke y darle usted tiene una interfaz fluida en su lugar.

0

Esto funciona (puede que tenga que cambiar la ruta de lo que es en la máquina en la que se ejecutará la aplicación):

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(); 
} 
Cuestiones relacionadas