Winword.exe在我的应用程序中有多接近

本文关键字:接近 应用程序 exe 我的 Winword | 更新日期: 2023-09-27 18:32:16

  1. 当我启动我的应用程序并打开word文件时,我在任务管理器中看到3进程winword.exe。
    在我调用"关闭"功能1进程Winword后.exe关闭。

  2. 当我在析构函数中调用worddoc.close()或wordapp.quit()时,我得到异常"无法使用与其底层RCW分离的COM对象"。

public class WordHelper
{
    private object nullobj = System.Reflection.Missing.Value;
    public string context = "";
    Microsoft.Office.Interop.Word.Document doc = new Document();
    Microsoft.Office.Interop.Word.Application wordApp = new Application();
    public WordHelper(string FileName)
    {
           //Open word file
    }
    //somefunction fo work with file
    public void CloseWord()
    {
        doc.Close();
        wordApp.Quit();
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wordApp);
    }
    ~WordHelper()
    {
        //i got exception
        doc.Close();
        wordApp.Quit();
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wordApp);
    }
}

我如何称呼我的班级

        WordHelper wddoc = new WordHelper("C:''Test Word''Test.docx");
        wddoc.CloseWord(); //this line i use and can close 1 process not 3
        //One process close after i close application

最后,我想关闭所有由我的应用程序打开的 winword.exe我想在析构函数中关闭它们。最后,我需要关闭我的应用程序打开的所有"winword.exe",并且我需要在析构函数中关闭它们。

Winword.exe在我的应用程序中有多接近

你在终结器(不同于析构函数)中执行此操作。终结器是不确定的,这意味着在它们运行时,类成员可能已经完成,因此将不再有效。

我将实现 Dispose 模式并显式控制您的单词 COM 对象的生存期。这个答案有很多很好的链接可能会对你有所帮助。

//要找出 WINWORD.exe 过程并将实时优先级设置为 WINWORD.exe这用于快速处理

Process[] proces = Process.GetProcessesByName("WINWORD");

foreach (Process proc in proces)
{
   proc.PriorityClass = ProcessPriorityClass.RealTime;
}