2009-07-01 12 views
5

Ich habe Office 2007 auf meinem Dev-Computer. Ich habe eine kleine App, die ich für einen Kundenserver mit Office 2003 erstelle, der einige Interop-Vorgänge durchführen muss. Mein Programm wird in einem nächtlichen Batch-Prozess als geplante Aufgabe ausgeführt.Office-Interop: Entwickeln mit 2003 PIAs auf einer Maschine mit Office 2007

Egal was ich tue, kann ich die Version 11.0 der Access Interop Assembly nicht finden, so dass auf dem Server funktioniert.

Ich habe versucht, sie explizit auf meinem Rechner herunterzuladen und zu installieren. Ich habe versucht, die Interop-Assemblys 2007 auf dem Server zu installieren (eine vollständige Office 2007-Installation kommt nicht in Frage). Ich habe verschiedene COM-Referenzen ausprobiert. Ich habe versucht, nach dem COM-Objekt auf dem Server zu suchen, um im Visual Studio-Projekt zu referenzieren. Und ich habe zu viele andere Kleinigkeiten ausprobiert, um sie alle hier aufzulisten.

Was geht hier vor? Wie kann ich das funktionieren lassen?

+0

Ich nehme an, Sie C geprüft: \ WINDOWS \ assembly \ GAC \ Microsoft.Office.Interop.Access? –

+0

Ja, habe ich. –

+0

Ich weiß nicht über die Umgebung, in der Sie programmieren, aber müssen Sie früh binden? Gibt es keine Form der späten Bindung, die Sie verwenden könnten, die Office-Version unabhängig wäre? –

Antwort

1

Ich habe die einzige Möglichkeit gefunden, dies zu tun, auch mit beiden Versionen nebeneinander in.Net v2 und höher, war eine Referenz auf die PIA (anstatt der COM-Lib) hinzuzufügen. Frameork v1.1 würde sich tatsächlich an die korrekte Version binden, wenn sie Seite an Seite vorhanden wären.

+0

Ich kann die PIA-Datei nirgendwo finden. –

+0

Okay: Ich bin ein Idiot.Ich konnte die Datei nicht im GAC des Servers finden, aber die Version 2007 (und nur die Version 2007, obwohl ich die PIAs 2003 explizit installiert habe) befindet sich in meinem lokalen GAC. Leider funktioniert das immer noch nicht auf dem Server und es hängt einfach, wenn ich versuche, die Access-Datei zu öffnen. Aber das ist eine ganz andere Frage –

+0

Ich muss zugeben, um die PIAs in erster Linie zu bekommen, extrahierten wir sie aus dem GAC (die Office XP PIAs kamen in einem schönen ZIP, die sie leichter zu bekommen). Nicht sicher in Bezug auf die Lizenzierung, aber könnten Sie Seite an Seite mit der PIA? (Offensichtlich würde man dort immer noch Zugriff brauchen) –

0

Können Sie die PIA nicht vom Server auf Ihren Computer (in einen lokalen Ordner) kopieren und dann einen Verweis auf diese Kopie hinzufügen?

Wenn Sie einen anderen Weg gehen möchten, können Sie die PIAs vermeiden und stattdessen ComImport verwenden. Andrew Whitechapel hat die Details in seinem Blog:

Add-ins for Multiple Office Versions without PIAs

Update (von Kommentaren): Wenn Sie nicht den Zugang PIA auf dem Server finden Sie könnten versuchen, die folgenden:

  • Laden Sie die Office 2003-PIA-Setup von hier: Office 2003 Update: Redistributable Primary Interop Assemblies

  • Extrahieren Sie die selbstextrahierende ausführbare Datei in der Befehlszeile (/? werden die Optionen Liste):

    >O2003PIA.exe /C /T:C:\PIA 
    
  • der extrahierten MSI Lauf mit voller Protokollierung aktiviert:

    >msiexec -i O2003PIA.msi /l*vx log.txt 
    

    und überprüfen Sie das Protokoll für den Zugang Interopassembly und weitere Hinweise, ob etwas mit der Installation schief gelaufen ist. Alternativ zu diesem Schritt können Sie ein MSI-Entpacker-Dienstprogramm verwenden, um die Assembly zu sortieren.

+0

Nein, die PIA-Datei existiert nirgends auf dem Server, selbst nachdem ich sie heruntergeladen und manuell installiert habe. –

+0

BTW: Interessante Lösung in der Verbindung, aber wenn ich so etwas verwenden würde, würde ich bei Codeüberprüfungszeit aus dem Raum ausgelacht werden. Ich kann es jetzt sehen: "WTF ist all dieser Mist?" –

+0

In der Tat. Ich freue mich auf VS 2010, die alle ComImports für Sie gut behandelt ... –

Verwandte Themen