我正在尝试杀死仍在运行的Outlook实例(在我的应用程序中使用而不是outlook本身),我在解构器中调用以下内容
//_app = Microsoft.Office.Interop.Outlook.Application
_app.Quit();
Marshal.FinalReleaseComObject(_app);
Marshal.FinalReleaseComObject(_app.Session);
GC.WaitForPendingFinalizers();
GC.Collect();
但没有任何帮助,是否有更多方法可以杀死它,如果有,怎么办?
答案 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();
}
}