我正在从C#.Net应用程序运行Excel,并且无法让关闭进程。如何让Excel进程从我的C#程序中正确关闭?
答案 0 :(得分:4)
试试这个:
foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
{
process.Kill();
break;
}
}
答案 1 :(得分:4)
我大约99%确定您的问题是由悬空的COM引用导致的,导致Excel进程无法关闭。 Excel特别容易出现这种情况,因为它倾向于透明地生成COM引用,而不会让您获得处理句柄并明确关闭它们的方法。
PIA通过对基础COM对象进行自己的一组引用来解决这个问题,除非你明确地让它们这样做,否则它们不会被清除。正是由于这个原因,通过PIA使用Excel非常繁琐。
Application.Quit()
(IIRC这就是所谓的) 如果所有引用都已正确清理,则会关闭该进程。这意味着您必须仔细管理包含COM引用Excel进程的任何内容的生命周期,并确保正确清理所有COM引用。
答案 2 :(得分:1)
Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);
[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);
答案 3 :(得分:0)
根据您的需要,您可以考虑使用SpreadsheetGear for .NET,它为您提供了一个没有COM Interop的Excel兼容组件(没有挂起的实例,更好的性能,不必担心是否安装了Excel或者是哪个版本的安装了Excel)。
您可以使用C#和VB源here查看实时ASP.NET示例,了解有关SpreadsheetGear的Windows窗体控件和示例here的详细信息,并在需要时下载免费试用here自己尝试一下。
免责声明:我拥有SpreadsheetGear LLC