Используйте класс Com из LocalSystem - PullRequest
1 голос
/ 01 марта 2011

Я использую объект Com.Ком-сервер должен использоваться из службы Windows, работающей в качестве определенной учетной записи.Но при работе в этой учетной записи он не может загрузить com, выдавая мне следующее исключение: создание экземпляра COM-компонента с CLSID {36998A63-857C-4B87-BC5E-72B7B3573F80} из IClassFactory не удалось из-за следующей ошибки: 80010105.

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

Я полагаю, это связано с тем, что сервер comустановлен на моем аккаунте.Я устанавливаю ком, используя "it name.exe / regserver".Я попытался запустить команду как LocalSystem, а затем она завершается неудачно с утверждением.У меня нет кода, поэтому я не знаю, в чем проблема, есть ли разрешение, которое я должен проверить?Я также попытался переключить встроенный тип взаимодействия в Visual Studio.

Любая помощь?

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Вы видите ошибку RPC_E_SERVERFAULT, что означает, что в необработанном COM-сервере было необработанное исключение Win32 (например, возможно, нарушение прав доступа).Если у вас нет ни исходного кода, ни символов отладки для COM-сервера, вы вряд ли сможете это диагностировать или исправить самостоятельно.(РЕДАКТИРОВАТЬ: Если это не очевидно, как несоответствие "битности" на 64-битной машине :-))

Опции:

  • , если вы должны иметь возможность активироватьсервер и использовать его COM-объекты в контексте учетной записи вашей службы, тогда вам нужно будет сообщить об этом поставщику сервера и попросить их диагностировать и исправить его;
  • вы можете использовать DCOMCNFG.EXE (вкладка «Удостоверение»), чтобы настроить COM-сервер для работы под вашей учетной записью, а не по умолчанию (то есть, «запускающий пользователь»), и посмотреть, позволяет ли это избежать проблемы (звучит из того, что вы говорите, что это, вероятно, будет).
2 голосов
/ 01 марта 2011

Я только что нашел это от нашего друга Ханса Пассанта в теме группы новостей Microsoft.Это так хорошо и уместно, я надеюсь, что Ганс не будет против, если я процитирую его.

Ах, страшный RPC_E_SERVERFAULT.RPC устанавливает обработчик SEH в заглушку, которая перехватывает любое исключение SEH, возникающее на COM-сервере.Даже действительно плохие, такие как AV.Клиент уведомляется об исключении с 0x80010105.Что ужасно, нет никакого способа получить какую-либо информацию об исключении.Что еще хуже, сервер просто продолжает работать, теперь, как правило, из-за радикально испорченного внутреннего состояния из-за исключения.Вы ничего не можете с этим поделать, кроме как попытаться отладить COM-сервер, чтобы выяснить, почему он вызывает исключения.Если для вас это черный ящик, у вас будет масса времени без поддержки поставщика COM-компонентов.

...