我创建了一个Windows应用程序,它使用了Microsoft Office 2003的 Office.dll 和 PowerPoint dll。在设计时,当我添加对这些dll的引用时在我的项目中,它指的是以下路径:
C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.PowerPoint\
应用程序在开发它的机器上运行完美,但是当我尝试在其他机器上运行它时它会失败。抛出的例外是:
System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.IO.FileNotFoundException
我试图在我的测试机器上找到上述路径,但我很惊讶,虽然安装了Office 2003和2007(2台不同的机器),但此处没有此文件夹。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
1.有一个Office 2003主互操作程序集(PIA)可再发行组件是一个Microsoft Windows Installer程序包,其中包含可以从here获取的Microsoft Office 2003产品的主互操作程序集,它包含您需要的程序集
2.您可以在项目引用属性中将此程序集的“复制本地”键设置为true,在这种情况下,它将被复制到项目的输出文件夹中
3.您真的不需要它与MS Office应用程序一起使用,尽管它使它更容易。以下是如何在没有互操作类的情况下打开演示文稿的示例
Type officeType = Type.GetTypeFromProgID("PowerPoint.Application");
object officeInstance = Activator.CreateInstance(officeType);
// set visible
object value = -1;
officeType.InvokeMember("Visible", BindingFlags.SetProperty, null, officeInstance, new object[] { value });
// open presenation
object objTrue = -1;
object objFalse = 0;
object fileNameObj = presentation_file_name;
object documents = officeType.InvokeMember("Presentations", BindingFlags.GetProperty, null, officeInstance, null);
documents.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, documents, new object[] { fileNameObj, objTrue, objFalse, objTrue });
没有测试这个确切的一个,但像这样的smth对我来说很好,问候
答案 1 :(得分:0)
您正在寻找的互操作dll安装在GAC的开发机器上。因此,它不是标准部署的一部分。你需要手工复制它。
另一个选项(也可能是更清洁的选项)是在目标计算机上运行Office安装并让它安装所有必要的东西。只需确保选择了正确的选项