Wie zum ausführen von Outlook mit der Prozess.Start("outlook.exe") und erhalten Sie die Kontrolle zurück
Mein C# - Programm benötigt zum starten von Office Outlook und Holen Sie sich die aktuellen "running outlook-Anwendung".
Um dies zu tun, habe ich realisiert das folgende einfache Programm (also, wenn Sie wollen, können Sie testen Sie es einfach):
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Runtime.InteropServices;
static void Main(string[] args)
{
Outlook.Application outlookObj = null;
if (Process.GetProcessesByName("OUTLOOK").Count().Equals(0))
{
Process.Start("outlook.exe"); //MY PROGRAM STOPS HERE
}
var process = Process.GetProcessesByName("OUTLOOK").First();
while (!process.HasExited)
{
try
{
outlookObj = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
break;
}
catch
{
outlookObj = null;
}
System.Threading.Thread.Sleep(10);
}
string result = (outlookObj== null)? "DOES NOT WORK" : "OK";
Console.WriteLine(result);
Console.ReadLine();
}
Mein problem ist, dass sobald Office Outlook gestartet wird, läuft dann mein C# - Konsolenanwendung nicht weiter seinen job. Nach der Process.Start("outlook.exe");
Anweisung ausgeführt wird, muss ich dann auf auf der Visual Studio-GUI, um die Konsole neu starten, Anwendung und schließlich Lesen Sie "OK" auf meiner Konsole-Anwendung.
Wie kann ich mein problem lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Microsoft schrieb Beispiel darüber, wie Sie sich in eine outlook-Instanz. Dies ist zwar direkt, was Sie gefragt, für Ihre Frage, die das Beispiel enthält, wie starten Sie ein neues outlook-Anwendung in der beabsichtigten Weise
als eine Randnotiz: in Ihrem Beispiel verwenden Sie den folgenden code:
Dies ist eine schlechte Praxis in der main-thread als Ihr durch 'busy waiting' durch mit dem thread.schlafen. Dies bedeutet, dass Sie 1. verwenden Sie CPU-power, während Ihre Anwendung ist nichts zu tun. 2. machen Sie Ihre GUI vollständig nicht mehr reagiert und wenn der thread.schlafen heißt zu oft Windows wird vorschlagen zu schließen, den Prozess nach unten (der ganze Bildschirm wird weiß und schließlich bekommen Sie ein popup mit der Frage, ob Sie warten wollen oder einfach nur Herunterfahren). Es gibt viele Möglichkeiten, in der .net framework, um zu verhindern, dass diese beiden Probleme (zum Beispiel mit Hilfe eines waithandle -, hintergrund-Arbeiter oder sperren)
Es gibt keine Notwendigkeit ausführen die ein neuer Prozess mit dem Prozess.Start-Methode. Stattdessen können Sie den Outlook-Verweis auf die C# - Projekt, und erstellen Sie eine neue Instanz der Anwendungs-Klasse. Sehen C# app Outlook automatisiert (CSAutomateOutlook) Beispielprojekt für weitere Informationen.
Außerdem finden Sie die folgenden Artikel hilfreich:
Dies funktioniert:
VIELLEICHT der Prozess einige Zeit brauchen, um zu starten.
Versuchen Sie dies:
Dadurch sollte starten und warten, bis es verfügbar ist, bevor versucht, es zu fangen...