代码之家  ›  专栏  ›  技术社区  ›  VJOY

Office 2003:找不到Microsoft.Office.Interop.PowerPoint dll

  •  0
  • VJOY  · 技术社区  · 16 年前

    我创建了一个使用 Office.dll文件 和 幻灯片演示文稿软件 Microsoft Office 2003的DLL。在设计时,当我将这些DLL的引用添加到我的项目中时,它引用以下路径:

    C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.PowerPoint\

    应用程序在开发它的机器上运行得很好,但是当我试图在另一台机器上运行它时,却失败了。它抛出的异常是:

    System.Reflection.TargetInvocationException:调用的目标引发了异常。--->系统.io.fileNotFoundException

    我试图在我的测试机上找到上面的路径,但是我很惊讶,尽管安装了Office2003和2007(两台不同的计算机),但是这个文件夹不在那里。

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

    2 回复  |  直到 10 年前
        1
  •  1
  •   serge_gubenko    16 年前

    1.有一个Office 2003主互操作程序集(PIA),Redistributable是一个包含Microsoft Office 2003产品主互操作程序集的Microsoft Windows Installer包,您可以从中获取该程序集。 here 它包括一个你需要的组件

    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 });
    

    没有测试过这个,但是这样对我来说很好,谢谢。

        2
  •  0
  •   mfeingold    16 年前

    您要查找的interop dll安装在GAC中的开发机器上。因此,它不是标准部署的一部分。你需要亲手复制。

    另一种选择(可能是更干净的选择)是在目标计算机上运行Office安装,并让它安装所有必需的内容。只需确保您选择了正确的选项

    推荐文章