Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么openfiledialog会将excel添加到任务管理器进程中?_C#_.net_Excel_Excel Interop - Fatal编程技术网

C# 为什么openfiledialog会将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

为什么这会导致excel被打开

        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非常感谢您提供此信息。如何进入系统内部?