C# 调用Office Excel 接口方法Quit(),但是Excel进程不退出的解决办法
相信在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 的引用计数。
- 要释放对变量的引用,请将变量设置为等于 Nothing 或 Null。
- 使用 Office 应用程序对象的 Quit 方法通知服务器关闭。
- 将每个对象声明为新变量。例如,将下面的代码行
也就是说,一个堆对象,对应一个栈对象,这样当遇到区域截至符 } 的时候,这个栈对象就被析构了,所以对应的引用计数 -1. Application.Quit() 就能工作正常了。
C# 调用Office Excel 接口方法Quit(),但是Excel进程不退出的解决办法相关推荐
- qt操作excel,excel进程无法退出的解决办法
安装福昕垃圾软件导致的,卸载福昕即可, excel->setProperty("Visible", false);装了福昕就不行,建议除福昕 excel->setPro ...
- 方法未找到异常java.lang.NoSuchMethodException的解决办法
方法未找到异常java.lang.NoSuchMethodException的解决办法 客户端运行,IDE日志抛出如下异常: java.lang.NoSuchMethodException: com. ...
- 在unity调用WebService的接口方法
在unity 调用WebService的soap接口方法总结: 1,wsdl工具 2,www的post方法 第一种在iOS无法发布(Android和PC都可以),第二种亲测可以在iOS模拟器上运行 第 ...
- 关于重写父类接口的方法是,冒出去除@Override的解决办法
最近公司没有事情,琢磨搞毕业设计.参照公司架构,搭起来后,dao方法中,impl继承父类接口.一直冒红.让我取消这个@Override 注解.... 原因是 java 编译器 版本过低,不支持... ...
- 调用淘宝接口有每IP数量/时间限制-负载均衡解决
其实标题不太准确,不过原理是一样. 这里要解决的问题是:调用淘宝接口有每IP数量/时间限制,但是我们的调用量较大,有可能超过这个限制,从而导致可能被淘宝屏蔽一小段时间.为了解决这个问题,我们需要用多个 ...
- 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...
如下代码: private void stopPreview() {Log.w(TAG, "stopPreview(), _isPreviewing = " + _isPrevie ...
- office2016无法打开新建的Excel表格,但是能打开以前新建的,解决办法如下
office2016无法打开新建的Excel表格,显示文件格式和扩展名不匹配.但是能打开以前的表格,解决办法如下 新建的excel工作表,结果打开时显示文件格式和扩展名不匹配,文件可能已经损坏或不安全 ...
- Excel、Word、PPT显示VB运行时错误53的解决办法
office办公软件是人们日常用到的,最近很多朋友反映在使用mac电脑打开Excel.Word.PPT显示VB运行时错误53,如下图.下面是macw小编带来的解决办法. 出现此类错误是由于不兼容的Ad ...
- Visio/EXCEL不能使用方向键移动对象/图形/单元格的解决办法
原因 Scroll lock键被按下,锁定了滚屏,我们需要取消它. 解决方法 使用fn快捷键 使用fn快捷键:fn键+c 使用实体键盘 按下这个键,就可以了 使用虚拟键盘 使用快捷键:ctrl+win ...
最新文章
- Hadoop 之父趣事:用儿子的大象玩偶为大数据项目命名
- 13、Excutors 结合 ThreadFactory 自动给线程加上线程名
- 功能强大的打包工具 NSIS,全部用脚本搞定 使用经验总结帖(持续更新中。。。)...
- vb字符串在内存中的分布?
- 软件著作权 开源框架_开源软件分享-基于.net core 3.1的快速开发框架
- SpringBoot文件上传时提示FileUploadBase$SizeLimitExceed
- dedecms的自定义模块
- 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
- 数据结构—树(大纲)
- Java程序员简历模板,内含个人专业技能和项目经验介绍
- linkedin领英账号限制被封了怎么办?
- linux根目录下各子目录的作用
- 服务器打包文件命令,nuxt构建项目打包部署服务器二(打包部署)
- git push 报错 remote: error: hook declined to update
- 用 JPress 创建模板及发布文章
- 使用程序自动调用ANSYS并运行命令流文件
- JDKbin目录下的众多exe文件的用途
- Dremel学习总结1
- 顶流AI大赛背后:OPPO小布助手的技术势能和促成的想象力
- python中如何打出字符π