2009-12-29 81 views
0

我創建了一個Windows應用程序,它利用Office.dll的PowerPoint的dll微軟office 2003在設計時的,當我加入參考這些DLL到我的項目是指以下路徑:的Office 2003:無法找到Microsoft.Office.Interop.Powerpoint DLL

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

應用程序運行完美的在那裏開發的機器上,但是當我試圖另一臺機器上運行它,它會失敗。它拋出的異常是:

System.Reflection.TargetInvocationException:調用的目標引發了異常。 ---> System.IO.FileNotFoundException

我試圖找到我的測試機上的上述路徑,但我感到奇怪的是,雖然Office 2003和2007年安裝(2臺不同的機器),此文件夾不在那裏。

任何人都可以幫我解決這個問題嗎?

回答

1

1.有一個Office 2003主互操作程序集(PIA)可再發行組件是Microsoft Windows Installer程序包,其中包含Microsoft Office 2003產品的主互操作程序集,您可以從here包括組件需要

2.You可以設置真正爲這個組件項目中的「複製本地」鍵引用的屬性,在這種情況下,它會被複制到你的項目的輸出文件夾

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

沒有測試這個確切的一個,但像他這樣平穩正常工作對我來說,對於

+0

感謝哥們。動態加載程序集,工作正常。但我的問題是,在目標機器上我沒有GAC文件夾。如果我安裝了PIA,它可以與兩個辦公版本一起使用。我不想用我的應用程序分發Microsoft程序集,因爲它可能會導致潛在的威脅。並且在每臺目標機器上安裝PIA是不可行的。 – 2009-12-29 05:58:29

+0

我猜你在這裏死了;在目標計算機上的GAC文件夾中沒有需要的程序集,並且您不希望\不能安裝它們,因此#1不起作用。您也不想將互操作程序集與您的應用程序捆綁在一起;這意味着#2也不適用。 – 2009-12-29 17:51:04

0

您正在尋找的interop dll安裝在GAC的您的開發機器上。因此它不是標準部署的一部分。你需要手工複製它。

另一個選擇(也許更清潔)將是在目標機器上運行Office安裝,並讓它安裝所有必需的東西。請確保您選擇了正確的選項

+0

我試圖PIA爲Office版本,它適用於Office 2007,但問題仍然存在於Office 2003中。我想,我已經在典型模式下安裝了Office 2003。 – 2009-12-29 05:03:29

相關問題