无法杀死仍在运行的Outlook实例

时间:2013-09-04 14:27:07

标签: c# outlook

我正在尝试杀死仍在运行的Outlook实例(在我的应用程序中使用而不是outlook本身),我在解构器中调用以下内容

        //_app = Microsoft.Office.Interop.Outlook.Application
        _app.Quit();
        Marshal.FinalReleaseComObject(_app);
        Marshal.FinalReleaseComObject(_app.Session);
        GC.WaitForPendingFinalizers();
        GC.Collect();

但没有任何帮助,是否有更多方法可以杀死它,如果有,怎么办?

1 个答案:

答案 0 :(得分:4)

首先导入 user32.dll ,以便能够使用 GetWindowThreadProcessId

然后 Kill 方法通过参数接收outlook app 并获取进程并将其杀死

public static class OutlookKiller
{
        [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId", SetLastError = true,
CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
    private static extern long GetWindowThreadProcessId(long hWnd, out long lpdwProcessId);

    public static void Kill(ref Microsoft.Office.Interop.Outlook.Application app)
    {
        long processId = 0;
        long appHwnd = (long)app.Hwnd;

        GetWindowThreadProcessId(appHwnd, out processId);

        Process prc = Process.GetProcessById((int)processId);
        prc.Kill();
    }
}