Frage

Ich bin sehr wohl bewusst der Support-Base-Artikel Microsoft besagt, dass es nicht Office-Produkte UI weniger automatisieren wird unterstützt. Es scheint, dass Windows Server 2008 x64 und Excel 2007 die gegebene Erklärung erzwingen.

Ich bin mit dem folgenden Code in einem NT-Dienst (Local System Account) OnStart-Methode. Denn es macht nicht ist Excel Automatisierung so, wie es funktioniert ist, wenn Sie den gleichen Code in einer Konsole-Anwendung ausgeführt werden.

Der angegebene Code besteht aus zwei Teilen. Der erste Teil startet Excel, erstellt ein neues Arbeitsbuch und speichert sie in dem angegebenen Dateinamen. Der zweite Teil startet eine neue Instanz von Excel und öffnet die angegebene Datei. Die offene Operation endet in dieser Ausnahme:

Der Service kann nicht gestartet werden. System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel kann nicht auf die Datei zugreifen 'c: \ temp \ test.xls'. Es gibt mehrere mögliche Gründe:

• Der Dateiname oder Pfad existiert nicht. • Die Datei wird von einem anderen Programm verwendet. • Die Arbeitsmappe, die Sie versuchen, zu speichern hat den gleichen Namen wie eine aktuell geöffnete Arbeitsmappe.

Warum war die automatisierte Excel kann Dateien auf der Festplatte starten und zu schreiben, aber nicht, wenn es „nur„ öffnen Sie eine vorhandene Datei gefragt wird?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
War es hilfreich?

Lösung

Die Lösung ist ganz einfach. Der Msdn Forum-Thread finden Sie finden hier

Um eine lange Geschichte kurz zu machen mir die Lösung hier bin Entsendung, Kredit geht an H Ogawa

Diese Lösung ist ...

· Windows 2008 Server x64

Bitte diesen Ordner machen.

C: \ Windows \ SysWOW64 \ config \ Systemprofile \ Desktop

· Windows 2008 Server x86

Bitte diesen Ordner machen.

C: \ Windows \ System32 \ config \ Systemprofile \ Desktop

... statt dcomcnfg.exe.

Diese Operation Büroautomation Probleme in meinem System genommen hat.

Ein Desktop-Ordner erscheint in den Systemprofilen Ordner notwendig zu sein Datei zu öffnen, indem Excel.

Aus Windows2008 verschwindet, hatte Windows2003 den Ordner, und ich denke, dass es diesen Fehler verursachen.

Andere Tipps

Auch in der Quelle angegeben mag, müssen Sie die richtigen Rechte für den Desktop-Ordner festlegen. Dieser arbeitete für mich unter Windows 2008-64bits und Office 2010 32 Bit.

  1. Erstellen Sie Verzeichnis "C: \ Windows \ SysWOW64 \ config \ Systemprofile \ Desktop" (für 64-Bit-Windows) oder "C: \ Windows \ System32 \ config \ Systemprofile \ Desktop" (für 32-Bit-Windows)

  2. Weisen Sie Benutzer "Network Services (Service Réseau)" die folgenden Rechte für den erstellten Ordner:

Lesen und Ausführen, Ordnerinhalt auflisten, lesen

John.

Ich habe ziemlich oft festgestellt, dass Aufruf Quit () nicht genug, um die Ressourcen freizugeben. Versuchen Sie: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

zwischen dem Beenden () Anweisung und wenn er auf null.

Es gibt viel mehr Fehler als derjenige erwähnt, dass Sie benötigen, um zu arbeiten, um durchzukommen Excel arbeitet unter Windows Server 2007 64-Bit. Siehe die Schritte arbeitete ich aus nach zwei volle Tage Arbeit an diesem!

Wenn Sie Apache verwenden, können Sie auch diese Schritte folgen müssen, um MS Word ordnungsgemäß funktioniert zu bekommen (zusammen mit allem, was in anderen Antworten beschrieben):

Im Folgenden finden Sie einen Screenshot der beiden Dialoge zeigen Ihnen bringen benötigen: eingeben Bild Beschreibung hier

Für Apache:

Dienste-> Apache-> Rechtsklick (Eigenschaften) -> Registerkarte Anmelden

MS Word:

Starten Sie dcomcnfg.exe-> Konsolen Root-> Component Services-> Computer-> Arbeitsplatz-> DCOM Config-> Finden Microsoft Application-> Rechtsklick (Eigenschaften) -> Identity Tab

**, wenn Sie die MS Word finden, stellen Sie sicher, dass Sie die richtigen DCOM-Konfiguration (64 Bit vs 32 Bit) starten je nachdem, welche Version von Office Sie installiert haben.

Es gibt zwei Möglichkeiten, können Sie Apache-Set verwenden Lokales Systemkonto und aktivieren Sie die Checkbox Desktop-Interaktion zu ermöglichen. Wenn Sie dies tun, dann müssen Sie setzen die Identität für MS Word Interaktiver Benutzer .

Ansonsten müssen Sie beide auf den gleichen Benutzer setzen (Ideal des Benutzer, der angemeldet ist), wie im Bild gezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top