Dlaczego program Excel nie może otworzyć pliku po uruchomieniu z harmonogramu zadań?

14

Napisałem skrypt PowerShell, który otwiera skoroszyt programu Excel i uruchamia makro. Kiedy uruchamiam ten skrypt z konsoli PS, a nawet z wiersza poleceń za pomocą powershell.exe script.ps1, to po prostu działa. Kiedy konfiguruję zadanie z harmonogramu zadań systemu Windows, pojawia się wyjątek dotyczący tego pliku Excel, mówiąc, że albo nie istnieje, albo jest już używany.

Plik istnieje na pewno, ponieważ skrypt działał poprawnie z linii poleceń i jestem pewien, że nie jest używany.

Próbowałem przenieść plik Excel do lokalnego i nieuprzywilejowanego obszaru, aby uniknąć problemów z zaufaniem sieciowym / uprawnieniami administratora. Zadanie nadal działa z najwyższymi uprawnieniami. Na ścieżce nie ma spacji ani znaków specjalnych.

Kiedy próbuję uzyskać dostęp do pliku za pomocą obiektu systemu plików, nie ma błędów, nawet gdy uruchamiany jest z harmonogramu, więc myślę, że jest on specyficzny dla Excel.Application.Workbooks.Open("..")metody.

Co powinienem teraz rozważyć?

zrz
źródło
1
Jakie konto użytkownika służy do uruchomienia zaplanowanego zadania?
Massimo,
Użyłem konta administratora domeny i wydaje się, że to jest problem. Korzystanie z grupy administratorów domeny działało. Ale teraz musiałem dowiedzieć się, dlaczego autoryzacja dostępu DCOM ma problem z kontem administratora domeny.
zrz
tl; dr: Obejście w odpowiedzi Eryka jest skuteczne , ale nie jest obsługiwane - zobacz ten artykuł pomocy technicznej firmy Microsoft . Lepiej jest szukać alternatyw, takich jak pakiet nuget DocumentFormat.OpenXml .
mklement0

Odpowiedzi:

8

Prawdopodobnie jest to problem z uprawnieniami DCOM. Automatyzacja programu Excel jest czasem pełna niebezpieczeństw ...

Jedynym sposobem, w jaki znalazłem takie problemy, jest skonfigurowanie programu Excel do uruchamiania jako określonego użytkownika za pomocą uprawnień DCOM.

  1. Otwórz usługi składowe (Start -> Uruchom, wpisz dcomcnfg)
  2. Przejdź do Usługi składowe -> Komputery -> Mój komputer i kliknij Konfiguracja DCOM
  3. Kliknij prawym przyciskiem myszy aplikację Microsoft Excel i wybierz Właściwości
  4. Na karcie Tożsamość wybierz opcję Ten użytkownik, wprowadź identyfikator i hasło interaktywnego konta użytkownika (domena lub lokalny), a następnie kliknij przycisk OK

Utrzymywanie go jako użytkownika interaktywnego lub uruchamiania nie działa niestety z harmonogramem zadań, nawet przy ustawianiu zadania do uruchomienia na koncie, które ma dostęp administratora do komputera.

squillman
źródło
1
Dzięki za zwrócenie uwagi na dcomcnfg. Musiałem ręcznie dodać aplikację Excel do rejestru, aby móc zobaczyć ją w dcomcnfg, a następnie próbowałem zmienić ustawienia tożsamości, ale to też nie działało. Z dcomcnfg zajrzałem do autoryzacji dostępu: administrator domeny był na liście i miał dostęp lokalny i zdalny, ale nad jej ikoną był mały czerwony znak (biały krzyż na czerwonym dysku). Nie mam pojęcia dlaczego, ale jakoś jest problem z kontem administratora domeny. Dodanie konta grupy Administratorzy domeny i uruchomienie zadania z tej grupy to obejście.
zrz
Microsoft nie obsługuje uruchamiania składników Office COM w sesjach nieinteraktywnych - patrz support.microsoft.com/en-us/help/257757/… . Odpowiedź erica jest obecnie skutecznym obejściem, ale nie jest obsługiwana.
mklement0
Ta odpowiedź może zostać ulepszona poprzez uwzględnienie sposobu dodawania wpisów aplikacji Microsoft Excel, gdy brakuje ich całkowicie w DCOM Config. Zobacz docs.microsoft.com/en-us/archive/blogs/... Ponadto, FWIW, to nie rozwiązało mojego problemu. Proces programu Excel nadal pojawia się w Menedżerze zadań, ale określony plik nigdy się nie otwiera / nie uruchamia.
TylerH
Podobnie po wprowadzeniu tej zmiany uniemożliwiło mi uruchomienie, a nawet otwarcie plików Excel VBA / edytora VBA, powodując CTD przy każdej próbie.
TylerH
42

Utwórz te dwa foldery:

32Bit:

C:\Windows\System32\config\systemprofile\Desktop  

64Bit:

C:\Windows\SysWOW64\config\systemprofile\Desktop

Excel potrzebuje tych folderów, jeśli nie jest uruchamiany interaktywnie. Utwórz oba foldery, nawet jeśli masz 64-bitowy system operacyjny.

eric
źródło
3
Chcę tylko dodać, że Microsoft nie popiera uruchamiania żadnego komponentu Office w sposób nieinteraktywny, ale w wielu przypadkach można go obejść.
flindeberg,
9
To poważna czarna magia. Nie wiem, co jest bardziej przerażające - że Excel potrzebował tego folderu w tym scenariuszu lub że ktoś wiedział, że Excel potrzebował tego folderu w tym scenariuszu.
Rich C
1
Aby podkreślić punkt @ flindeberga: To obejście jest skuteczne , ale nie jest obsługiwane - zobacz ten artykuł pomocy technicznej Microsoft .
mklement0
Tworzenie tych folderów i przypisywanie pełnej kontroli do mojego konta (które jest również kontem uruchamiającym zaplanowane zadanie) aż do folderów system32 / SysWOW64 do folderów Desktop nadal nie działało dla mnie.
TylerH
2

Podczas ustawiania uprawnień DCOM, jeśli program Microsoft Excel nie pojawia się podczas dcomcnfgpróbymmc comexp.msc /32

odniesienie

cmo
źródło
To spowodowało, że DCOM Config otworzył się dla mnie i zapytał, czy chcę zarejestrować kilka wpisów, ale Excela nie było wśród nich.
TylerH