2008-11-15 16 views
6

Używamy obiektów COM do uzyskiwania dostępu do arkuszy kalkulacyjnych programu Excel w usłudze NT (za pośrednictwem hosta skryptów systemu Windows). Przed wersją Vista działało to pięknie, ale począwszy od wersji Vista otrzymujemy następujący błąd:Dostęp do plików z obiektu COM programu Excel kończy się niepowodzeniem po uruchomieniu z usługi NT w systemie Vista

Program Microsoft Office Excel nie może uzyskać dostępu do pliku "c: \ myfiles \ test.xls". Istnieje kilka możliwych przyczyn:

  • Nazwa pliku lub ścieżka nie istnieje.
  • Plik jest używany przez inny program.
  • Skoroszyt, który próbujesz zapisać, ma taką samą nazwę jak obecnie otwarty skoroszyt.

Próbowałem zmienić ustawienia logowania usługi NT, aby używać własnego konta, konta administratora i systemu lokalnego. Przejrzałem Zasady Bezpieczeństwa Lokalnego i nie znalazłem nic. Spędziłem kilka dni na przeszukiwaniu Microsoft KB bezskutecznie.

Jeśli skrypt jest wykonywany z poziomu aplikacji konsolowej, działa poprawnie. Plik otwiera się i jest przetwarzany bez problemu. Błąd występuje tylko wtedy, gdy jest wykonywany z kontekstu usługi.

Jeśli usługa działa w systemie Windows XP lub Server 2003 z dodatkiem SP1, działa również poprawnie. Tylko w systemie Vista to się nie udaje (a teraz dostaliśmy zgłoszenie awarii w dodatku SP2 dla serwera Server 2003)!

kodem, na co warto jest wyjątkowo prosta:

dim xl_app 
Set xl_app = CreateObject("Excel.Application") 
xl_app.Workbooks.Open mypath,0,1 

Podejrzewam, że ta osoba może być przeżywa ten sam problem: http://bytes.com/forum/thread819740.html

+0

Czy można otworzyć plik Excel w usłudze za pomocą zwykłego interfejsu API Win32 (np. CreateFile?) –

+0

W jakim języku jest napisana usługa? W jaki sposób wywołujesz hosta skryptów? –

Odpowiedz

1

tylko kilka dalszych pytań:

  • Z jakiej wersji programu Excel korzystasz?
  • Czy próbowałeś uruchomić usługę z podwyższonymi uprawnieniami?
0

Mam "rodzaj" rozwiązany ten problem. Jeśli użyjesz "dcomcnfg" do zmiany konta, aby uruchomić aplikację Excel na konto użytkownika lub "interaktywnego użytkownika", uruchomiona z usługi usługa excel rozpoczyna się na tym koncie i teraz może uzyskać dostęp do systemu plików.

Problem polega na tym, że jest to ustawienie globalne. Jeśli użyjesz: * "ten użytkownik": wtedy Excel ZAWSZE otwiera się z tym użytkownikiem I zawsze otwiera się bez interfejsu w sesji 0, nawet dla interaktywnego korzystania z programu Excel. IE jest zawsze niewidoczny. * "Interaktywny użytkownik": Teraz program excel zawsze uruchamia się w interaktywnym użytkowniku, który, jak sądzę, nie będzie działał dla usługi, która uruchomi się przy starcie z NIE interaktywnym użytkownikiem.

Musi być tu pewne ustawienie zabezpieczeń. Mam nadzieję, że inni mają inne pomysły.

+0

@davidNelson mówił o tym, ale tutaj jest opis jak rozwiązać ten problem. Pracował dla mnie. http://bytes.com/topic/c-sharp/answers/819740-c-service-excel-application-workbooks-open-fails-when-called-service#post3466746 –

Powiązane problemy