windows - 如何在matlab中杀死孤立的winword.exe

标签 windows matlab ms-word process office-interop

在 Windows 7 企业版上运行 matlab R2010B

在 matlab 脚本中,我将一堆结果保存到一个 word 文件中,然后最后关闭并退出 word。我使用的代码是:

WordFname = ['BatInfoDoc' sprintf('%0.3f',now) '.doc']; % serialnumbered filenames
WordFile = fullfile(pwd,WordFname);
WordApp = actxserver('Word.Application');
WordDoc = WordApp.Documents.Add;
WordDoc.SaveAs2(WordFile);
....
WordApp.Selection.TypeText([title2 title3 title4 title5 title6]);
WordApp.Selection.TypeParagraph;

最后在脚本的末尾

WordDoc.Close;
WordApp.Quit;

我遇到的问题是,在我的开发过程中,我经常使 matlab 脚本崩溃并最终留下孤立的 WINWORD.EXE 进程,每个进程都对其所写入的文件保持锁定。

到目前为止,我一直在使用 TaskManager 手动一次终止这些进程。经过整个上午的开发,我发现自己有大约 20 个文件无法删除,因为它们被大约 11 个孤立的 WINWORD.EXE 进程锁定!

我的问题: 1)是否有一种优雅的方法来处理文件写入、保存和关闭等,这样当我的脚本在我到达关闭文件并退出单词的部分之前崩溃时,我就不会锁定文件和进程? 2)是否有一种优雅的方法来确定matlab脚本中的不良进程,并从matlab脚本中检查并删除它们?也就是说,我可以对我的 matlab 进行编码,以便它自行清理吗?

几分钟后添加: 顺便说一句,我不想​​将所有代码放在一个大的 try-catch 中,然后在发现错误后关闭窗口。问题是我确实喜欢在出错时进入 Debug模式,并且捕获的错误不会使我进入 Debug模式。

最佳答案

创建 Wordapp 后,立即使用 c = onCleanup(@()Wordapp.Quit)。当您的函数退出时,无论是自然退出还是崩溃退出,c 将被删除,并且其函数将执行,从而退出 Word。如果这是脚本的一部分而不是函数,您可以手动删除 c 来退出。

此外 - 在开发/调试时,我会将 Wordapp.Visible 设置为 true,以便您可以在必要时手动关闭 Word。设置回 false 以进行生产。

关于windows - 如何在matlab中杀死孤立的winword.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838203/

相关文章:

matlab - 在matlab中添加许多大矩阵的更快方法

arrays - 将 bsxfun 与匿名函数一起使用

python - Ms Word 及其花哨的引号中断字符串比较

ruby - 尝试从 Word 文档中获取内容时获取 "Ole::Storage::FormatError: OLE2 signature is invalid"

python - 从 Windows cmd 为多个文件运行 python 脚本

c++ - 在不知道 C++ 完整路径的情况下打开 .exe 文件

windows - 为什么不调用窗口过程而不是调用 CallWindowProc?

c# - 如何读写 Windows "Network Location"

matlab - 如何向量化嵌套循环

svn - 在 TortoiseSVN 中合并 Office Open XML (.docx) 是否有效?