Начиная с обновления Windows kb4340556: ошибка автоматизации VBA COM .NET при CreateObject()

После обновления Windows7 Update KB 4340556 от 10 июля 2018 г. мы получаем следующее сообщение об ошибке:

"Automation Error" : The system cannot find the file specified" from the Access VBA CreateObject() call.

 Set ComClass = CreateObject("MyApplication1.InteropStart")

Microsoft определяет это как проблему безопасности.

Если мы удалим обновление KB4340556, звонок будет работать как раньше.

У кого-нибудь есть такая же проблема? Или лучшее решение, чем обновление для удаления?


person Volker Fried    schedule 11.07.2018    source источник
comment
У нас проблема со многими клиентами. На данный момент более 40 машин. В настоящее время только в 64-разрядных системах Windows 7 SP1. 32-разрядные системы Windows 7 не затронуты.   -  person Volker Fried    schedule 11.07.2018
comment
У меня было несколько ошибок Центра обновления Windows при установке этого обновления ... Сейчас перезагружаюсь. (у меня тоже Win7)   -  person ashleedawg    schedule 11.07.2018
comment
Мы сталкиваемся с той же проблемой на Windows Server 2012 R2. Соответствующим обновлением Windows для 2012 R2 является KB4340558, когда вы просматриваете историю обновлений, и KB4338424, когда вы просматриваете установленные обновления. Когда мы удаляем обновление, ошибка исчезает. Несмотря на все мои усилия, мне не удалось найти альтернативное решение для удаления. Мы также предпочли бы лучшее решение.   -  person user2458080    schedule 11.07.2018
comment
Я вижу это в Windows 10 x64, 429: компонент ActiveX не может создать объект, удаление KB4338819 решает проблему. В Windows 7 x64 у нас проблемы с KB4338420   -  person Nickolai Nielsen    schedule 12.07.2018
comment
Относится к stackoverflow.com/questions/51289285/   -  person Lex Li    schedule 12.07.2018


Ответы (6)


Мы также пострадали от нескольких клиентов.

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

Наконец мне удалось решить проблему с помощью конфигурации. Судя по всему, аутентифицирующая личность веб-сайта теперь должна соответствовать идентичности пула приложений. Или у IUSR больше нет разрешений. введите описание изображения здесь

person keydon    schedule 12.07.2018
comment
Спасибо. Утром проснулся с проблемой. Это «исправило» это для меня - person Matt; 12.07.2018
comment
Это ответ, который решил это. У меня была такая же проблема после обновления безопасности Windows на прошлой неделе (однако было отказано в разрешении на создание объекта). Я немного отчаялся переписать весь код, используя .net dll с com. Большое спасибо - person Jonathan; 16.07.2018
comment
Хорошо, это работает с анонимной аутентификацией, но я не могу сделать это с аутентификацией Windows. - person piotrbrzuska; 17.07.2018

Наша сборка Interop .Net имела подпись со строгим именем. Подписание, по-видимому, больше не принимается. Создание новой подписи (файл *.snk) в Visual Studio заставляет снова работать вызов ComInterop CreateObject.

РЕДАКТИРОВАНИЕ 26.07.2018

Мы включили контроль учетных записей (UAC) на машинах наших клиентов, как описал Паолино.

При создании новой подписи также создается новый токен открытого ключа для сборки. Это вызывает проблемы со ссылками.

person Volker Fried    schedule 11.07.2018
comment
comment
Какая версия Visual Studio? Используете ли вы ключ, сгенерированный VS (например, ненадежный корень)? Можете ли вы сказать, является ли сертификат SHA1 или SHA256? - person user2458080; 11.07.2018
comment
В качестве альтернативы не используйте для сборки строгое имя. Как отмечено в ссылке, на которую ссылается @HansPassant, она не предназначена для использования в качестве механизма безопасности. Если учесть, что в контексте COM одновременно может быть загружена только одна версия библиотеки, единственный хороший вариант использования строгих имен выходит за рамки. - person this; 11.07.2018
comment
Для сборок [ComVisible] важно, чтобы они принадлежали GAC на машине пользователя, чтобы решить DLL Hell. - person Hans Passant; 12.07.2018
comment
Понял. Установка неподписанной версии библиотеки все равно дает ту же ошибку. Я действительно озадачен. - person user2458080; 12.07.2018
comment
Подпись была впервые создана с помощью Visual Studio 2010. Сегодня проект является проектом Visual Studio 2017, а новая рабочая подпись была создана с помощью Visual Studio 2017. - person Volker Fried; 26.07.2018

У нас тоже проблемы. Мы обнаружили, что на самом деле это было одно из встроенных обновлений внутри KB4340556 - KB4338420, которое вызывало нашу проблему.

У нас есть приложение, которое использует COM-объект в качестве связующего звена между собой и MS Office. При установке этого обновления был удален COM-объект, из-за чего требуемая mscoree.dll не загружалась. Проблема наблюдается только на 64-битной Win7 с установленными 64-битными продуктами Office.

Я разместил сообщение в сообществе разработчиков на сайте visualstudio.com (https://developercommunity.visualstudio.com/content/problem/291884/july-2018-cumlative-security-and-quality-update-kb.html) в их .NET Форум. В данный момент проблема находится на рассмотрении. Удаление KB4338420 временно устраняет проблему, но в следующий раз, когда ваша система проверяет наличие обновлений, она думает, что KB4340556 не установлено, и хочет переустановить его. Единственный обходной путь на данный момент — это скрыть обновление, так как отсутствует только KB4338420.

person Jeff Wilson    schedule 12.07.2018

Включение UAC и установка его на уровень по умолчанию устранили проблему для нас.

Наш сценарий — это сборки .NET, открытые для COM, и приложение VB6, создающее экземпляры этих объектов .NET с помощью CreateObject.

Обновление. Уловка UAC не работает в Windows Server 2012 R2.

person Pao'lino    schedule 12.07.2018
comment
За что минус? Просто делюсь своим опытом, таким образом мы починили много компьютеров. - person Pao'lino; 12.07.2018

Чтобы подтвердить то, что здесь сказали другие пользователи. У нас также возникают проблемы после обновления KB4340556. Следующий код

Set myObject = CreateObject("System.Collections.ArrayList")

вызывает ошибку «Отказано в доступе» при создании компонента .NET в классическом ASP, работающем на IIS и 64-разрядной версии Server 2008r2.

Тот же код, запущенный в файле .vbs (в 32-разрядном формате), работает нормально.

Указание другой версии .NET в пуле приложений не влияет.

person TB DTC    schedule 12.07.2018