我如何识别Word的另一个实例正在应用程序外部运行?

时间:2019-04-14 09:45:00

标签: c# ms-word

我想开发管理Word文档的C#Windows应用程序。 我想认识到另一个Word应用程序正在以其他方式打开(例如,从Windows“开始”菜单中),我想对此发出警告。

用户可以从此应用程序的主窗口中打开Word文档,就像在单击测试按钮上运行的此硬编码测试一样:

myApp = new Word.Application();
Word.Document mydoc1 = myApp.Documents.Open("C://test/doc1.docx");
Word.Document mydoc2 = myApp.Documents.Open("C://test/doc2.docx");

用户可以将文本或图像从此应用程序主窗口的Treeview拖放到此打开的文档中。

但是,当用户以不同于此应用程序的方式打开新的单词应用程序时(例如,从“开始”菜单或双击WINWORD.EXE等),则使用该应用程序会造成混乱,因为拖放的工作原理仅在此应用程序打开的托管文档上正确显示。

我通过指示用户“不得运行其他Word应用程序”来解决此问题,该应用程序将提供有关这种情况的警告。

我发现,在应用程序启动时进行检查很简单(类似这样):

foreach (Process lP in Process.GetProcesses())
            {
                if (lP.ProcessName == "WINWORD")
                {
                    MessageBox.Show("Word is running, close please");
                    return;
                }
            }

但是我不知道该如何识别当我的应用程序已经运行后又打开另一个Word的情况。我认为此检查将在某个计时器滴答声中定期开始,但是我不知道如何从外部启动的第二个“外来Word应用程序”中识别出我的应用程序启动的“我的Word应用程序”。

1 个答案:

答案 0 :(得分:0)

我接受了此解决方案:

在计时器上打勾,此方法将运行:

{
            int s;
            Process[] mps = Process.GetProcessesByName(aName);
            s= mps.Length;
            mps.ToList().ForEach(p => p.Dispose());
            return s;
}

我认为这是简单的解决方案。

我认为这不是一个很好的解决方案:)。 (...对不起,吉米,但感谢您对内存的警告,根据Google的说法,您是对的)。

有人看到任何隐藏的问题吗?