最近在用VSTO开发WORD插件,了解过程中发现如果Word插件设置为启动时加载,那么它的说法就是启动一个Word进程的时候加载,
1.如果只是打开一个WORD文件的话那么并不会新建一个WINWORD进程,从而导致我的插件没法加载 2.如果使用 MSWord.Application app = new MSWord.Application();对象去打开WORD话,在插件获取过程中有一定问题,问题就是我会用到插件Globals.ThisAddIn.Application.ActiveDocument获取文档,它会提示我文件还没有打开,在折腾至于我在网上看见了别人写的一篇文章代码如下: /// <summary> /// 打开Word /// </summary> /// <param name="WordPath"></param> public static void OpenWord(string WordPath) { //string tempPath = System.Environment.GetEnvironmentVariable("TEMP"); //var filepath = Path.Combine(tempPath, WordPath); string winwordPath = ""; Process[] wordProcesses = Process.GetProcessesByName("WINWORD"); foreach (Process process in wordProcesses) { // Debug.WriteLine(process.MainWindowTitle); // 如果有的话获得 Winword.exe 的完全限定名称。 winwordPath = process.MainModule.FileName; break; }
if (winwordPath.Length > 0) // 如果有 Word 实例在运行,使用 /w 参数来强制启动新实例,并将文件名作为参数传递。 wordProcess.Start(); // 当前进程一直在等待,直到该 Word 实例退出。 wordProcess.WaitForExit(); wordProcess.Close(); } 但是值得注意的是:WordPath的路径不是随便都可以的,必须使用System.Environment.GetEnvironmentVariable("TEMP");的一个路径。实际值如下:C:\Users\ADMINI~1\AppData\Local\Temp\。如果是自己创建的文件夹路径会打不开。就这个要命的问题折腾了我2小时,所以写下此篇文章 |
|