Ошибка с Excel и C # при выходе с сервера - PullRequest
3 голосов
/ 31 января 2012

Я написал службу Windows на C #.Мой сервис предназначен для открытия книги с поддержкой макросов Excel (в Excel 2010).Я установил этот сервис на нашем сервере, который работает под управлением Windows Server 2008 64-bit.У моей службы, похоже, есть проблема с запуском Excel, когда никто не вошел на сервер, есть ли у кого-нибудь решение этой проблемы?

Я получаю следующую ошибку:

System.Runtime.InteropServices.COMException (0x8000401A): Не удалось получить фабрику класса COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} из-за следующей ошибки: 8000401a.

Excel установлен на сервере, служба работает нормально, когда я вошел в систему на сервере, но как только все пользователи вышли из системы, я получаю вышеуказанную ошибку.Я хотел бы, чтобы служба запускала мою книгу Excel независимо от того, открыт сеанс на сервере или нет.

Ответы [ 3 ]

5 голосов
/ 31 января 2012

Кажется, у моей службы проблема с запуском Excel, когда на сервер никто не вошел, у кого-нибудь есть решение этой проблемы.

Конечно, есть проблема. Службы Windows не могут отображать пользовательский интерфейс , так как вы ожидаете, что он запустит приложение с графическим интерфейсом, например Microsoft Excel, когда не будет зарегистрирован пользователь?

Полученный вами специальный код ошибки COM означает:

8000401a: процесс сервера не может быть запущен из-за неверного настроенного идентификатора. Проверьте имя пользователя и пароль.

Другими словами, Excel пытается запуститься как интерактивный пользователь, который относится к пользователю, который в данный момент подключен непосредственно к консоли сервера. Поскольку ни один пользователь не вошел в систему, никакого интерактивного пользователя не существует, и приложение перестает работать, когда оно пытается принять это удостоверение.

Дизайн все равно был нарушен: Excel не был предназначен для запуска из службы Windows. Вместо этого создайте стандартное приложение Windows. Если вам нужно, чтобы он работал в фоновом режиме без собственного пользовательского интерфейса, не создавайте окно.

1 голос
/ 31 января 2012

Используете ли вы Office Automation для запуска Excel? Извините, но Office Automation не поддерживается в сервисных процессах. Он предназначен для работы только в интерактивном процессе.

Если вам повезет, использование автоматизации Office из процесса обслуживания не будет работать. Если вам не повезет, будет работать , и вы фактически запустите свое приложение в производство. Затем вы начнете находить случайные ошибки, которые очень трудно воспроизвести, а еще труднее исправить, не ломая что-то еще.

Это будет связано с тем, что настоящая ошибка - ошибка design - вы использовали Office Automation из процесса обслуживания.

Возьми это из голоса опыта ...

1 голос
/ 31 января 2012

По сути, ответ Коди Грей правильный.Раньше мне нужно было запускать Excel из службы Windows, чтобы напечатать файл.

Мы смогли обойти подобные ошибки, настроив службу для запуска под определенной учетной записью пользователя и извремя от времени входите в систему под этой учетной записью пользователя и пытайтесь запустить файлы, которые не видят сообщения об ошибках, всплывающие в Excel.

В вашем случае это возможно потому, что Excel запускается впервые ион запрашивает у вас что-то вроде ваших инициалов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...