Почему автоматизация COM из консольного приложения может работать на моей машине разработки, а не на другой? - PullRequest
0 голосов
/ 14 марта 2012

В рамках проекта я использую автоматизацию COM с CorelDRAW. Автоматизация осуществляется через консольное приложение, которое в конечном итоге будет запущено веб-службой, но в целях решения проблемы, стоящей за этим вопросом, запускается как запланированная задача. Это работает на моей машине разработки (работает под управлением 32-разрядной Windows Server 2003), но завершается ошибкой с ошибкой COM 80080005 на компьютере под управлением 64-разрядной версии Windows Server 2003.

Похоже, что в журналах средства просмотра событий нет никакой дополнительной информации [см. Правку ниже].

Если я вхожу в систему, используя учетную запись, которая запускает запланированное задание, и запускаю консольное приложение, оно работает как положено - поэтому я не думаю, что это проблема 32-разрядной на 64-разрядной (но я рад, что ее исправили) .

Проблема заключается в том, что запланированная задача не «входит» в систему так, как этого требует / требует CorelDRAW. Если это проблема, почему это не происходит на моей машине разработки? Есть ли какие-то настройки, которые я мог изменить на своей машине для разработки, чтобы разрешить это, но о которых сейчас забыл?

Исследуя аналогичные проблемы, здесь и в других местах, я попробовал несколько вещей, включая:

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

Проверка наличия у объекта CorelDRAW локального запуска и локальной активации в dcomcnfg.

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

Удаление разрешений из стартовой учетной записи на моем компьютере разработчика, чтобы воспроизвести ошибку (чего я не могу).

Что еще мне следует попробовать?

Редактировать

После еще нескольких копаний в журналах просмотра событий появляется дополнительная информация.

Произошел сбой аудита с идентификатором 560 для объекта ServiceActive. Я могу найти исправление для Windows Server 2003 с пакетом обновления 1 (SP1), но я использую пакет обновления 2 на обеих машинах. Я нашел http://social.msdn.microsoft.com/forums/en-US/windowstransactionsprogramming/thread/98683298-75da-4952-b2c1-057419c85501/, который предлагает использовать sc sdset ....

Если я добавлю учетную запись, которая выполняет запланированное задание, в группу администраторов, я получу

The application, c:\Program Files (x86)\Corel\CorelDRAW Graphics Suite X5\Programs\CorelDRW.exe, generated an application error The error occurred on 03/19/2012 @ 08:20:25.869 The exception generated was c0000005 at address 65F6378B (CrlUtl!CrlUtl::WDictionaryIterator<IBaseBind,ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > >::GetNext)

, что говорит о том, что он не может найти то, что он ожидает найти.

1 Ответ

0 голосов
/ 15 марта 2012

Вы получаете CO_E_SERVER_EXEC_FAILURE , которые предполагают, что COM-серверу (в вашем случае я предполагаю, что это локальный сервер DCOM CoralDraw) не удалось запуститься.

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

Это правильно? Просто для устранения побочных проблем, make suare CarolDraw отлично работает в интерактивном режиме с учетной записью пользователя, которая запускает запланированное задание, а затем запускает консольную программу при запуске из командной строки.

Вы используете Windows по расписанию? Я подозреваю, что вам не хватает членства в группе NT AUTHORITY \ INTERACTIVE или CONSOLE LOGON. Чтобы проверить это предположение, позвольте командной строке вывести членство в группе и привилегии текущего токена (GetTokenInformation - это API) и сравнить то, что вы получаете при запуске как запланированная задача и из командной строки.

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