.net-Anwendung schlägt fehl, wenn sie über geplante Aufgabe abgefeuert wird

8

Ich habe eine .NET-Konsolenanwendung, die in c # geschrieben ist und genau das tut, was sie tun sollte, wenn sie in Visual Studio ausgeführt wird und wenn sie auf die .exe-Datei im Dateisystem klickt. Es läuft wie ein Zauber. ABER wenn ich einen geplanten Windows-Task entweder in meinem Windows 7-Dev-Computer oder dem Windows 2008 R2-Prod-Computer erstelle, kann der letzte Schritt in der Anwendung nicht ausgeführt werden. Dieser Schritt ist, ein .doc im Hintergrund zu öffnen und es zu verdecken (einfach ein Speichern als) zu einem .docx.

Die Anwendung wurde entwickelt, um einen Netzwerkpfad zu besuchen, ein Verzeichnis namens ~ Converted zu erstellen, das kein Problem darstellt, und dann für jedes .doc-Objekt, dass es im Hintergrund geöffnet wird, ein Speichern als ausführt und eine .docx-Version des Do speichert in der ~ Umgewandelte Richt. Ich glaube, dass mit dem Code nichts falsch ist, da er außerhalb der geplanten Aufgabe ohne Probleme erstellt und ausgeführt wird. Ich habe jede Einstellung innerhalb der Aufgabe untersucht, Änderungen vorgenommen und ohne Erfolg erneut getestet. Ich führe es mit einem Benutzer, der Teil der Administratorengruppe ist, IMO-Berechtigungen ist nicht das Problem. Ich habe es mit dem NETWORK SERVICE-Account versucht, gleiches Ergebnis.

Der eigentliche Stack-Trace-Fehler, der nur beim Ausführen der geplanten Task generiert wird, ist:

  

System.UnauthorizedAccessException: Das Abrufen der COM-Klassenfactory für die Komponente mit der CLSID {000209FF-0000-0000-C000-000000000046} ist aufgrund des folgenden Fehlers fehlgeschlagen: 80070005 Zugriff verweigert. (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED)).

Die Codezeile, die das tut, ist:

%Vor%

Ich habe stundenlang nach diesem gesucht und nichts hilfreiches gefunden. Es scheint, als würde das Ausführen des Codes über die Aufgabe ein COM-Zugriffsproblem verursachen, wenn der Code das Wort doc öffnet / initialisiert. Die Aufgabe macht Spaß mit vollen Administratorrechten, läuft mit höchsten Rechten und wenn der Benutzer angemeldet ist oder nicht. Wie ich schon sagte, mit all diesen Einstellungen wurde gespielt, es hat keinen Unterschied gemacht.

Es ist jetzt soweit, dass ich diese Konsolenanwendung als Dienst neu schreiben muss. Wenn ich dieses Problem nicht lösen kann. Hoffentlich kann mir jemand einen ganzen Tag zusätzliche Arbeit ersparen und mir bei dem Problem helfen?

Hinzufügen - Basierend auf @ Dmitry Martovoi Post unten habe ich Ticks für den Benutzer EVERYONE hinzugefügt und der Stack-Trace hat sich geändert in:

  

System.NullReferenceException: Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt.

zeigt auf diese Zeile innerhalb derselben saveAs-Funktion:

%Vor%

Hinzufügen - Ich habe Benutzer geändert, die diesen Pfad besitzen. Ich bin mir nicht sicher, auf welchem ​​Benutzer sie ausgeführt wurde. Hier ist ein Anwendungsereignisprotokoll erorr. HINWEIS - Dies geschieht nur, wenn die Anwendung über den Taskplaner ausgeführt wird:

%Vor%

OK Problem ist behoben. Wie aus dem Link @dmay pasted MS ersichtlich ist, rate ich nicht, Office-Anwendungen unbeaufsichtigt auf der Serverseite auszuführen, und sagt, dass dies nicht unterstützt wird. Aber die Lösung war die Spur @ Dmitry wurde geleitet:

1) Start- & gt; Ausführen- & gt; dcomcnfg

2) Komponentendienste- & gt; Computer- & gt; Arbeitsplatz

3) Klicken Sie mit der rechten Maustaste auf Arbeitsplatz, Eigenschaften

4) Registerkarte COM-Sicherheit, Start- und Aktivierungsberechtigungen, Standard bearbeiten

5) Fügen Sie alle Zugriffsrechte für NETWORK SERVICE hinzu (welches das offensichtlich zu verwendende Konto ist), das Sie zum Ausführen der geplanten Aufgabe verwenden

6) Klicken Sie mit der rechten Maustaste auf Arbeitsplatz & gt; DCOM-Konfiguration & gt; Microsoft Word 97 - 2003 Dokument & gt; Eigenschaften

7) Gehen Sie zum Reiter Identität und kreuzen Sie den interaktiven Benutzer an

8) Gehen Sie zur Registerkarte Sicherheit und überprüfen Sie die Einstellungen für alle drei Bereiche. Stellen Sie sicher, dass NETWORK SERVICE angezeigt wird und Optionen aktiviert sind. Dies sollte als Ergebnis von Schritt 5 sein.

9) Wiederholen Sie den Vorgang ab Schritt 6 für andere Bürodokumenttypen. Ich habe dies für xls und mdb

getan

10) neustart .... Alle funktionieren jetzt gut

Tut mir leid, ich hätte das hinzufügen sollen. Wenn Sie diese in Schritt 7 nicht sehen können:

%Vor%

Dann ist es wahrscheinlich eine 32-Bit-Office-Installation auf einer 64-Bit-Maschine, hier ist die Lösung , um sie sichtbar zu machen:

Danke euch allen für eure Zeit

    
Mat41 28.07.2013, 22:38
quelle

4 Antworten

8

Sie sollten dem angegebenen Benutzer Zugriff auf COM automation factory gewähren:

  • 1) Start- & gt; Ausführen- & gt; dcomcnfg
  • 2) Komponentendienste- & gt; Computer- & gt; Arbeitsplatz
  • 3) Klicken Sie mit der rechten Maustaste auf Arbeitsplatz, Eigenschaften
  • 4) Registerkarte COM-Sicherheit, Start- und Aktivierungsberechtigungen, Standard bearbeiten
  • 5) Fügen Sie alle Zugriffsrechte für den angegebenen Benutzer hinzu, den Sie verwenden möchten geplante Aufgabe.
Dmitry Martovoi 28.07.2013, 22:57
quelle
1

Bei einem ähnlichen Problem, wenn die Anwendung normalerweise wie erwartet funktioniert, aber wenn ich sie von der geplanten Aufgabe aus starte, schließt sie sofort und gibt einen Fehler aus: "Dateipfad nicht gefunden ...".

Es wurde beim Festlegen des Aktionsparameters für geplante Aufgaben behoben:

Start In (optional): c: \ my application \ ausführbarer Ordnerpfad

    
Fragment 23.07.2015 10:29
quelle
0

Es scheint mir ein Berechtigungsproblem zu sein. Das Ausführen des Codes in VS ist viel zu verschieden, als wenn er selbst ausgeführt wird. VS kümmert sich um die meisten Dinge und macht dem Entwickler das Leben leichter.

Können Sie überprüfen, ob das Konto, mit dem Sie die geplante Aufgabe ausführen, über die Berechtigung zum Zugriff auf den Netzwerkpfad verfügt?

    
Robert Dinaro 28.07.2013 22:46
quelle
0

Sehen Sie sich zunächst die Ссылка

an

Sie können einige Dinge ausprobieren:

  • Führen Sie Ihre Aufgabe unter einem echten Benutzerkonto aus (stellen Sie sicher, dass dieses Konto Zugriff auf den Netzwerkpfad hat)
  • 'Ogawa Hack', wie hier erwähnt Ссылка Erstellen Sie den Desktop-Ordner für das Systemkonto C:\Windows\SysWOW64\config\systemprofile\Desktop (oder \System32\ , wenn Ihr System 32x ist)
dmay 28.07.2013 22:53
quelle