【问题标题】:How to restart outlook (close then open outlook) with C# console app如何使用 C# 控制台应用程序重新启动 Outlook(关闭然后打开 Outlook)
【发布时间】:2019-05-16 10:38:41
【问题描述】:

我想在每次打开控制台应用程序时重新启动 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】:

    使用 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,您可以在此处查看我的答案之一:Closing Excel Workbook - System.Runtime.InteropServices.COMException : Exception from HRESULT: 0x800A03EC

    这里解释了您遇到的问题(它与 Outlook 的关系与 Excel、Word、Powerpoint 相同):How do I properly clean up Excel interop objects?

    您可能会发现只 1) 杀死进程更容易,但更好的程序员会使用 2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多