C# 为什么openfiledialog会将excel添加到任务管理器进程中?
为什么这会导致excel被打开C# 为什么openfiledialog会将excel添加到任务管理器进程中?,c#,.net,excel,excel-interop,C#,.net,Excel,Excel Interop,为什么这会导致excel被打开 OpenFileDialog openFileDialog1 = new OpenFileDialog(); DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog. if (result == DialogResult.OK) // Test result. { //EXCEL.EXE *3
OpenFileDialog openFileDialog1 = new OpenFileDialog();
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
if (result == DialogResult.OK) // Test result.
{
//EXCEL.EXE *32 is now showing in the task manager!
我正在从openfiledialog
中选择一个XLSX
文件,如上所示,我在任务管理器中看到了这个过程
有人能告诉我这是怎么可能的吗?如果Excel已经打开,您应该尝试获取此实例,而不是创建一个新实例
using System.Runtime.InteropServices;
...
Excel.Application xl = null;
try {
// Try to get an existing instance
xl = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
} catch (COMException ex) {
// Excel was not open. Open a new instance
xl = new Excel.ApplicationClass();
}
如果Excel已打开,则应尝试获取此实例,而不是创建新实例
using System.Runtime.InteropServices;
...
Excel.Application xl = null;
try {
// Try to get an existing instance
xl = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
} catch (COMException ex) {
// Excel was not open. Open a new instance
xl = new Excel.ApplicationClass();
}
非常感谢你的帮助。我的应用程序将打开excel,并应将其关闭。“excel已打开”是什么意思?可能有一个excel应用程序已打开-可见或不可见。在后一种情况下,您将在任务管理器中看到它。也许它会给你一个提示,第二个实例在哪里打开…谢谢!我所做的正是美国国际开发署和我所看到的有趣的行为。请看我编辑的问题,非常感谢你的帮助。我的应用程序将打开excel,并应将其关闭。“excel已打开”是什么意思?可能有一个excel应用程序已打开-可见或不可见。在后一种情况下,您将在任务管理器中看到它。也许它会给你一个提示,第二个实例在哪里打开…谢谢!我所做的正是美国国际开发署和我所看到的有趣的行为。请看我编辑的问题。如果所有其他问题都失败了,请一步一步地通过代码!它应该快速显示导致问题的行。此外,Excel返回的任何对象在完成后也必须通过ReleaseComObject释放,例如xlWorkBook、xlWorkSheet、xlWorkSheet.get_Range、EmailList.Cells。错过任何一个Excel都将保持打开状态。顺便说一句,您的清理代码应该在finally块中,以保证无论成功还是异常都能被调用。非常感谢。你能看看编辑过的问题吗?我想我找到了发生这种情况的原因,因为你的机器上安装了shell扩展。当您使用OpenFileDialog时,它们将加载到您的进程中。您可能有一个使用Excel在Excel电子表格文件上显示“丰富信息”的软件。如果您不知道哪一个可能会这样做,请使用SysInternals的AutoRuns实用程序逐个禁用它们。@HansPassant-wow非常感谢您提供此信息。如何进入系统内部?如果所有其他操作都失败,只需一步代码!它应该快速显示导致问题的行。此外,Excel返回的任何对象在完成后也必须通过ReleaseComObject释放,例如xlWorkBook、xlWorkSheet、xlWorkSheet.get_Range、EmailList.Cells。错过任何一个Excel都将保持打开状态。顺便说一句,您的清理代码应该在finally块中,以保证无论成功还是异常都能被调用。非常感谢。你能看看编辑过的问题吗?我想我找到了发生这种情况的原因,因为你的机器上安装了shell扩展。当您使用OpenFileDialog时,它们将加载到您的进程中。您可能有一个使用Excel在Excel电子表格文件上显示“丰富信息”的软件。如果您不知道哪一个可能会这样做,请使用SysInternals的AutoRuns实用程序逐个禁用它们。@HansPassant-wow非常感谢您提供此信息。如何进入系统内部?