孤兒WINWORD.EXE在Windows 7企業版如何殺死在MATLAB
運行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中,然後在我發現錯誤後關閉窗口。這個問題是我喜歡去錯誤的調試模式,並發現錯誤不會帶我進入調試模式。
btw'onCleanup'的實現非常類似於@Andrey所展示的(像C++智能指針) – Amro
我喜歡這兩種建議,自從發佈後我發現我可以讓我的窗口可見,而不是孤立它們。 – mwengler
我正在使用這個!我實際上創建了一個非匿名清理函數,這樣我可以保存文檔,並在退出後刪除wordapp對象,並關閉另一個我在腳本中寫入的文件。 – mwengler