相信在C# 中使用过EXCEL的人都遇到过调用 ExcelApplication.Quit() ,但是 Excel进程依然存在的情况:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

//Do your work...

excelApp.Quit()

GOOGLE了许多中文帖子,最终都是强行调用 Process.kill() 草草了事。其实解决方案就在微软的网站上:

http://support.microsoft.com/kb/Q317109

看了这个以后,根源其实就在引用计数:

当 Visual Studio .NET 从托管代码调用 COM 对象时,它自动创建运行库可调用包装 (RCW)。RCW 封送 .NET 应用程序和 COM 对象之间的调用。RCW 保留着对 COM 对象的引用计数。因此,如果 RCW 上没有将所有引用全部释放,COM 对象就不会退出。

简单的说,就是栈内存中,依然有对象引用存在,RCW我推测是堆内存中的一段区域,栈内存中的对象指向了堆内存,所以GC就认为这一段堆内存依然有用,就不会去释放它。

所以,最终的解决方案其实就如这个链接指出的:

  • 要确保退出 Office 应用程序,自动化代码一定要满足以下条件:

    • 将每个对象声明为新变量。例如,将下面的代码行

      oBook = oExcel.Workbooks.Add()

      更改为以下内容:

      dim oBooks as Excel.Workbooks
      oBooks = oExcel.Workbooks
      oBook = oBooks.Add()

    • 停止使用某个对象时,应使用 System.Runtime.InteropServices.Marshal.ReleaseComObject。这样可以减少 RCW 的引用计数。
    • 要释放对变量的引用,请将变量设置为等于 NothingNull
    • 使用 Office 应用程序对象的 Quit 方法通知服务器关闭。

也就是说,一个堆对象,对应一个栈对象,这样当遇到区域截至符 } 的时候,这个栈对象就被析构了,所以对应的引用计数 -1.  Application.Quit() 就能工作正常了。

C# 调用Office Excel 接口方法Quit(),但是Excel进程不退出的解决办法相关推荐

  1. qt操作excel,excel进程无法退出的解决办法

    安装福昕垃圾软件导致的,卸载福昕即可, excel->setProperty("Visible", false);装了福昕就不行,建议除福昕 excel->setPro ...

  2. 方法未找到异常java.lang.NoSuchMethodException的解决办法

    方法未找到异常java.lang.NoSuchMethodException的解决办法 客户端运行,IDE日志抛出如下异常: java.lang.NoSuchMethodException: com. ...

  3. 在unity调用WebService的接口方法

    在unity 调用WebService的soap接口方法总结: 1,wsdl工具 2,www的post方法 第一种在iOS无法发布(Android和PC都可以),第二种亲测可以在iOS模拟器上运行 第 ...

  4. 关于重写父类接口的方法是,冒出去除@Override的解决办法

    最近公司没有事情,琢磨搞毕业设计.参照公司架构,搭起来后,dao方法中,impl继承父类接口.一直冒红.让我取消这个@Override  注解.... 原因是 java 编译器 版本过低,不支持... ...

  5. 调用淘宝接口有每IP数量/时间限制-负载均衡解决

    其实标题不太准确,不过原理是一样. 这里要解决的问题是:调用淘宝接口有每IP数量/时间限制,但是我们的调用量较大,有可能超过这个限制,从而导致可能被淘宝屏蔽一小段时间.为了解决这个问题,我们需要用多个 ...

  6. 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...

    如下代码: private void stopPreview() {Log.w(TAG, "stopPreview(), _isPreviewing = " + _isPrevie ...

  7. office2016无法打开新建的Excel表格,但是能打开以前新建的,解决办法如下

    office2016无法打开新建的Excel表格,显示文件格式和扩展名不匹配.但是能打开以前的表格,解决办法如下 新建的excel工作表,结果打开时显示文件格式和扩展名不匹配,文件可能已经损坏或不安全 ...

  8. Excel、Word、PPT显示VB运行时错误53的解决办法

    office办公软件是人们日常用到的,最近很多朋友反映在使用mac电脑打开Excel.Word.PPT显示VB运行时错误53,如下图.下面是macw小编带来的解决办法. 出现此类错误是由于不兼容的Ad ...

  9. Visio/EXCEL不能使用方向键移动对象/图形/单元格的解决办法

    原因 Scroll lock键被按下,锁定了滚屏,我们需要取消它. 解决方法 使用fn快捷键 使用fn快捷键:fn键+c 使用实体键盘 按下这个键,就可以了 使用虚拟键盘 使用快捷键:ctrl+win ...

最新文章

  1. Hadoop 之父趣事:用儿子的大象玩偶为大数据项目命名
  2. 13、Excutors 结合 ThreadFactory 自动给线程加上线程名
  3. 功能强大的打包工具 NSIS,全部用脚本搞定 使用经验总结帖(持续更新中。。。)...
  4. vb字符串在内存中的分布?
  5. 软件著作权 开源框架_开源软件分享-基于.net core 3.1的快速开发框架
  6. SpringBoot文件上传时提示FileUploadBase$SizeLimitExceed
  7. dedecms的自定义模块
  8. 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
  9. 数据结构—树(大纲)
  10. Java程序员简历模板,内含个人专业技能和项目经验介绍
  11. linkedin领英账号限制被封了怎么办?
  12. linux根目录下各子目录的作用
  13. 服务器打包文件命令,nuxt构建项目打包部署服务器二(打包部署)
  14. git push 报错 remote: error: hook declined to update
  15. 用 JPress 创建模板及发布文章
  16. 使用程序自动调用ANSYS并运行命令流文件
  17. JDKbin目录下的众多exe文件的用途
  18. Dremel学习总结1
  19. 顶流AI大赛背后:OPPO小布助手的技术势能和促成的想象力
  20. python中如何打出字符π

热门文章

  1. Swing 美化包-JTattoo
  2. Java/web/jsp根据pdf模板生成荣誉证书PDF文件
  3. linux下进入recovery mode 的单用户模式
  4. 你认识5G物联网关键器件FBG吗
  5. IP安全:DDoS攻击、tearDrop攻击和微小碎片攻击
  6. 【Day7.1】张掖七彩丹霞看日出
  7. ERP : 产出控制
  8. 几种常用的power bi 图表怎么做
  9. 计算机专业法语词汇,法语词汇学习:计算机及网络词汇(1)
  10. 国产国脑与腾讯会议配合挺默契