问题描述
最近在做为文件做索引的过程中需要读取Word和PPT类型的文件,开始是通过引用相关Office的DLL文件来实现读取文件内容,不过隐患是一旦操作异常终止,(比如说突然把浏览器关掉)而此时Office的实例还没有来得及关闭,捕捉异常的代码也因为程序结束而无法执行。这样的话进程中就会残留WINWORD或是POWERPNT进程,请问各位大侠有没有好的解决方法?我很想找开源的Office读取工具,不过貌似没有好用的。
解决方案
解决方案二:
服务器的函数不会因为客户端IE关闭而中断执行的。估计还是你程序的问题。要catch异常,并且在Finially里面关闭wordapplicaton。注意不止是关闭文档还要关闭applicatonWord.Application=newApplication()...OtherCode....doc.SaveAs2000(...);//NowusetheQuitmethodtocleanupobjectsaveChanges=true;app.Quit(refsaveChanges,refoptional,refoptional);
解决方案三:
谢了,我回去测试一下。
解决方案四:
操作word前释放资源和关闭WORD等进程。
解决方案五:
谢谢提醒,我还想请教一下,如果在操作WORD(PPT)之前确实检验到WINWORD或POWERPNT进程的存在,如何安全的释放他们?(因为此时只能得到线程Process的实例,没法通过WORD实例的Quit方法正常关闭线程),请大侠明示,是否有别的方法能通过检验到的WINWORD线程得到一个WORDAPP的实例再关闭,或是通过别的方法安全释放这些线程。谢谢!
解决方案六:
谢谢提醒,我还想请教一下,如果在操作WORD(PPT)之前确实检验到WINWORD或POWERPNT进程的存在,如何安全的释放他们?(因为此时只能得到线程Process的实例,没法通过WORD实例的Quit方法正常关闭线程),请大侠明示,是否有别的方法能通过检验到的WINWORD线程得到一个WORDAPP的实例再关闭,或是还存在通过别的方法安全释放这些线程。谢谢!
解决方案七:
顶顶,有没有高手帮着解答一下4楼的问题
解决方案八:
引用4楼lx20030303的回复:
谢谢提醒,我还想请教一下,如果在操作WORD(PPT)之前确实检验到WINWORD或POWERPNT进程的存在,如何安全的释放他们?(因为此时只能得到线程Process的实例,没法通过WORD实例的Quit方法正常关闭线程),请大侠明示,是否有别的方法能通过检验到的WINWORD线程得到一个WORDAPP的实例再关闭,或是通过别的方法安全释放这些线程。谢谢!
下面是查找当前打开的WORD的实例并关闭的代码环境是VS2008,Word11PowerPoint的代码你改一下Microsoft.Office.Interop.Word.ApplicationClasswordApp=null;try{//获取当前Word的实例wordApp=System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application")asMicrosoft.Office.Interop.Word.ApplicationClass;}catch{}if(wordApp!=null){//当前有打开的Word,关闭objectmissing=System.Reflection.Missing.Value;objectsavechanges=false;//不保存更改wordApp.Quit(refsavechanges,refmissing,refmissing);}
解决方案九:
用同样的方法获取PowerPoint的实例有点麻烦没有搞成功你参考一下http://support.microsoft.com/kb/222783/zh-cn
解决方案十:
谢谢帮忙,我再去研究PPT实例的获取方法,还有个问题,就是执行了PPT实例的QUIT()方法后,POWERPNT进程还是存在,只是CPU占有率一直为0,不过我还是想要彻底关闭PPT的进程,不知道怎么改进?除了Quit()方法,我也尝试了网上说的释放.COM引用和主动调用垃圾收集,貌似进程还是关不掉。有什么好办法?谢谢指教。
解决方案十一:
好像office组件是有这样的问题,我也碰到过