簡體   English   中英

如何使用C#console app重新啟動outlook(關閉然后打開outlook)

[英]How to restart outlook (close then open outlook) with C# console app

我想每次打開控制台應用程序時重新啟動Outlook,我在PC服務器上部署此應用程序,因為沒有人會在假期時處理此問題。

為什么我要重啟outlook? 因為服務器PC中的Outlook會收到很多電子郵件,我們有應用程序可以獲取附件並每天下載。 但問題是有時候電子郵件被卡住了,我們必須重新啟動Outlook以獲得卡住的電子郵件。

我已經嘗試了一些代碼,並且對於process.start - >它可以打開outlook,但是我無法關閉重復的outlook(舊的)

namespace CloseOpenOutlook
{
    class Program
    {
        static void Main(string[] args)
        {


            Process process = Process.GetCurrentProcess();
            var dupl = Process.GetProcessesByName(process.ProcessName);


            foreach (var p in dupl)
            {
                if (p.ProcessName == "OUTLOOK")
                {
                    p.Kill();

                }
            }

            Process myProcess = Process.Start("OUTLOOK");
        }
    }
}

預期結果=它將關閉舊的前景並打開新的前景

實際結果=它打開新的,而不是關閉舊的,所以它將是2個Outlook

我不知道它出了什么問題,已經從很多來源嘗試但仍然沒有工作

使用C#關閉Outlook有兩種主要方法。

1)終止進程,使用ProcessID 執行它 ,否則您將關閉所有Outlook實例:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);

private void OpenOutlookAndKillProcess()
{
   int pid = -1;
   //Get PID
   outlookApp = new Outlook.Application();
   HandleRef hwnd = new HandleRef(outlookApp, (IntPtr)outlookApp.Hwnd);
   GetWindowThreadProcessId(hwnd, out pid);
   .....
   //Finally
   KillProcess(pid,"OUTLOOK");
}

private void KillProcess(int pid, string processName)
{
    System.Diagnostics.Process[] AllProcesses = System.Diagnostics.Process.GetProcessesByName(processName);
    foreach (System.Diagnostics.Process process in AllProcesses)
    {
       if (process.Id == pid) process.Kill();
    }
    AllProcesses = null;
}

2)更好的方法是使用AutoReleaseComObject或原始的VSTO-Contrib,你可以在這里看到我的一個答案如何使用它: 關閉Excel工作簿 - System.Runtime.InteropServices.COMException:來自HRESULT的異常:0x800A03EC

這里解釋了你遇到的問題(它與Outlook的方式與Excel,Word,Powerpoint相同): 如何正確清理Excel互操作對象?

你可能會發現它更容易只是1)殺死進程,但更好的程序員將使用2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM