Office 2003:无法找到Microsoft.Office.Interop.Powerpoint dll

时间:2009-12-29 04:18:54

标签: .net interop ms-office gac

我创建了一个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台不同的机器),但此处没有此文件夹。

有人可以帮我解决这个问题吗?

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安装并让它安装所有必要的东西。只需确保选择了正确的选项