14 Stimmen

Windows 7 .net Excel .SaveAs() Error Exception von HRESULT: 0x800A03EC

Hintergrund:
Ich habe meine alte Festplatte auf der Arbeit getoastet und bekomme eine neue. Damit muss ich meinen Rechner neu aufsetzen. Mein Manager hat Windows 7 auf seinem Leih-Laptop installiert, den ich benutze, während mein Rechner außer Betrieb ist. Aber ich bin auf ein Problem gestoßen.

Wir haben eine ganze Reihe von Anwendungen, die die Referenz Microsoft.Office.Interop.Excel verwenden. Ich habe bisher ein paar Fehler überstanden, aber der eine, bei dem ich seit ein paar Tagen feststecke (mein Rechner hat nach dem ersten Rebuild einen Festplattenausfall erlitten), konnte nicht behoben werden. Ich habe nach diesem Fehler gesucht, kann aber niemanden finden, der dieses Problem unter Windows 7 hat, obwohl ich andere Lösungen für Windows Server 2008 erfolglos ausprobiert habe.

Wenn ich dieses Problem nicht beheben kann, werde ich Windows 7 nicht verwenden können, und das möchte ich wissen, bevor ich einen Rechner neu aufbaue, um ihn dann (zum dritten Mal) löschen und neu starten zu müssen.

Problem:
Betriebssystem: Windows 7 Enterprise
Fehlermeldung: Ausnahme von HRESULT: 0x800A03EC
Code:

Private m_xls As Microsoft.Office.Interop.Excel.Application
Private m_wkbk As Microsoft.Office.Interop.Excel.Workbook
Private m_wksht As Microsoft.Office.Interop.Excel.Worksheet
m_xls = New Application
m_xls.Visible = False : m_xls.DisplayAlerts = False
m_wkbk = m_xls.Workbooks.Open(Me.FilePath)
m_wksht = CType(m_wkbk.ActiveSheet, Worksheet)
'...Write some data...'
m_wkbk.SaveAs(Me.FilePath, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value)

Der Fehler tritt in der letzten Zeile auf.

Was ich bis jetzt ausprobiert habe:

  1. Ändern des AppPools zur Verwendung des NetworkService-Konto (es war ApplicationPoolIdentity', das ich nicht in der Benutzerliste in den Sicherheitseinstellungen finden konnte). Dann geben Sie dem NetworkService-Konto vollen Zugriff auf den entsprechenden Ordner.
  2. Zugriff des NetworkService auf alle Einstellungen der "Microsoft Excel-Anwendung" in DCOMCNFG
  3. Ausführen dieses Befehls "appcmd set config -section:asp -enableParentPaths:true", weil es die einzige andere Sache ist, die ich finden konnte
  4. Mit der Funktion .SaveCopyAs(), die zwar funktionierte, aber verschiedene Fehler verursachte

Ich wollte nur sehen, ob jemand anderes mit diesem Problem konfrontiert wurde oder nicht, da Windows 7 neu ist. Ich kann mit Server 2008 arbeiten, aber ich würde gerne einige solide Gründe dafür haben, bevor ich meinem Manager sage, dass es nicht funktionieren wird.

Ich danke Ihnen, Jeff

0 Stimmen

Ich empfehle die Verwendung von download.cnet.com/Filemon/3000-2094_4-10020837.html . FileMon, kann Ihnen sagen, was hier los ist. SaveAs scheint ein Problem mit der Sperre oder der Authentifizierung zu sein. Geben Sie an, wenn Sie mehr Informationen benötigen...

0 Stimmen

0 Stimmen

@shahkalpesh: Danke, ja, das habe ich mir vorhin angeschaut, aber es löst mein Problem nicht.

19voto

Jeff Keslinke Punkte 4168

Anmerkung: Dies muss etwas gekürzt werden, da es eine Zusammenstellung aller Korrekturen ist, die ich in unserem internen Wiki vorgenommen habe, aber ich bin mir nicht sicher, welche Teilmenge von Änderungen es zum Funktionieren gebracht hat, also werde ich alles einfügen.

Lösung:

Die folgenden Änderungen können eine Obermenge dessen sein, wie dieses Problem angegangen werden kann.

-Führen Sie DCOMCNFG.exe aus und navigieren Sie zu 'Komponentendienste>Computer>Mein Computer'.
-Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz" und dann auf "Eigenschaften".
Öffnen Sie die Registerkarte "COM-Sicherheit". Fügen Sie Ihr Konto für jede der aufgelisteten Schaltflächen hinzu ('Edit Limits...' und 'Edit Default...' unter 'Access Permission' & 'Launch and Activate Permissions'). Geben Sie Ihrem Konto alle Zugriffsoptionen. Klicken Sie auf 'Übernehmen' und dann auf 'OK'.
-Erweitern Sie in DCOMCNFG die Verknüpfung "Arbeitsplatz" und öffnen Sie den Ordner "DCOM Config".
Klicken Sie mit der rechten Maustaste auf "Microsoft Excel-Anwendung" und wählen Sie "Eigenschaften".
Wählen Sie auf der Registerkarte "Sicherheit" die Option "Anpassen" für "Start- und Aktivierungsberechtigungen" und "Konfigurationsberechtigungen". Klicken Sie für beide auf die Schaltfläche "Bearbeiten...". Geben Sie Ihrem Konto Zugriff auf alles.
Gehen Sie in den "Eigenschaften" der "Microsoft Excel-Anwendung" auf die Registerkarte "Identität".
-Wählen Sie die Option "Der interaktive Benutzer".
-Klicken Sie auf "Übernehmen" und dann auf "OK".
-Starten Sie Ihren Computer neu.

-Versuchen Sie das untenstehende DCOMCNFG & ApplicationPoolIdentity-Änderung.

-Eingabeaufforderung als Administrator ausführen.
-Navigieren Sie zu c: \Windows\System32\inetsrv > und führen Sie 'appcmd set config -section:asp -enableParentPaths:true' aus

Alternativ könnten Sie .SaveCopyAs() verwenden, obwohl dies das Problem möglicherweise nicht löst und Codeänderungen erfordert.

DCOMCNFG Für Windows 7:

Dieser Fehler tritt bei Aufrufen von 'Excel app = New Application();' auf

Dieser Link beschreibt, wie man das Problem für XP/Server 2003 behebt, kann aber auch auf Windows 7 übertragen werden: http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

Ich habe kein "ASPNET"-Konto bzw. konnte keins finden. Sie müssen den Anwendungspool überprüfen, um herauszufinden, unter welchem Namen die Anwendung ausgeführt wird.
Gehen Sie dazu auf "Computerverwaltung>Dienste und Anwendungen>Internet-Informationsdienste>Anwendungspools".
Klicken Sie mit der rechten Maustaste auf den entsprechenden AppPool und wählen Sie "Erweiterte Einstellungen". Unter "Prozessmodell>Identität" finden Sie das Konto, unter dem er läuft. Bei mir war es "ApplicationPoolIdentity", das ich auch nicht finden konnte, also änderte ich es in "Network Service" wie bei Windows Server 2003.
Sobald dies geschehen ist, führen Sie DCOMCNFG.exe aus. Navigieren Sie zu "Komponentendienste>Computer>Mein Computer>DCOM-Konfiguration".
Klicken Sie mit der rechten Maustaste auf "Microsoft Excel-Anwendung" und wählen Sie "Eigenschaften". Wählen Sie die Registerkarte "Sicherheit". Wählen Sie unter "Start- und Aktivierungsberechtigungen" die Option "Anpassen" und klicken Sie auf "Bearbeiten".
Klicken Sie dann auf die Schaltfläche 'Hinzufügen...'.
Geben Sie den Namen des entsprechenden Kontos ein, in diesem Fall "Network Service", und klicken Sie auf "Check Names". Klicken Sie dann auf "OK".
Zurück auf der Seite "Start- und Aktivierungsberechtigungen" markieren Sie das Konto "Netzwerkdienst" und aktivieren die Kontrollkästchen "Lokaler Start" und "Lokale Aktivierung". Klicken Sie dann auf "OK".

4voto

Rick Mogstad Punkte 807

Als ich diesen Fehler bekam, habe ich, glaube ich, angefangen, SaveCopyAs statt SaveAs zu verwenden. Ich bin nicht sicher, was andere Fehler, die dies verursacht Sie, wenn Sie dort vielleicht etwas könnte für diese Situation herausgefunden werden, erarbeiten könnte.

Außerdem führen Sie höchstwahrscheinlich dazu, dass excel.exe nach der Verarbeitung einer Datei im Speicher verbleibt. Hier ist ein Artikel, der zeigt, wie man COM-Interop-Objekte richtig verwendet und freigibt ( http://support.microsoft.com/kb/317109 ). Es ist mühsam, aber es hat bei mir funktioniert, damit diese Ressourcen freigegeben werden, bevor die App geschlossen wird.

0voto

ShdNx Punkte 3114

Vergewissern Sie sich, dass Sie das Programm (und EXCEL.EXE) als Administrator ausführen und dass das Verzeichnis, in dem Sie speichern, nicht mit dem Attribut "schreibgeschützt" versehen ist.

Versuchen Sie auch, den vollständigen Dateipfad anstelle des Dateinamens anzugeben.

Sie könnten auch versuchen, System.Reflection.Missing.Value zu übergeben, anstatt die optionalen Parameter wegzulassen.

Etwas anderes fällt mir im Moment nicht ein. Ich hoffe, das hilft.

ShdNx

0voto

user1437891 Punkte 112

Die obige Antwort von Jeff Keslinke hat bei mir funktioniert. Sie müssen auch einen Blick auf den Anwendungspool werfen, den Ihre App verwendet, und sicherstellen, dass die Identität korrekt ist und vollen Zugriff und Rechte hat.

0voto

Jack Liu Shurui Punkte 498

Ich habe das gleiche Problem und fand Anwendungsabsturzfehler mit Ausnahmecode: 0xc0000005 in Windows-Ereignissen. Suchen Sie im Internet und finden Sie die folgende Lösung unter dem Link Excel 2010 Absturz, Ausnahmecode: 0xc0000005 Benennen Sie die Dateierweiterung der geöffneten Datei von xlsx in zip um. Die Lösung funktioniert in meinem Fall.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X