31 votes

Comment instancier correctement des objets COM 32 bits dans ASP classique après l'installation de Windows Update KB4340558?

Sur Windows Server 2012 R2, après l'installation de la mise à jour KB4340558 (histoire de mise à jour) / KB4338424 (les mises à jour installées) nous ne pouvons plus instancier .NET .Dll (pia) en ASP classique en mode 32 bits à l'aide de server.createobject. Nous recevons l'erreur 0x800A01AD "composant ActiveX ne peut pas créer l'objet"

Lorsque nous avons désinstaller la mise à jour, l'erreur disparaît. Malgré tous mes efforts, j'ai été incapable de trouver une solution alternative à la désinstallation. Nous préférons pour réinstaller la mise à jour et vérifiez que les modifications ont été nécessaires à Windows Server et/ou de la DLL afin de permettre les objets COM pour être instancié correctement. Il n'y a pas d'indices dans le journal système, aucun indice dans le CVE de la base de données, et aucun indice dans les erreurs ASP génère. S'il vous plaît aider!

35voto

keydon Points 664

Nous avons été touchés avec une multitude de clients trop.

J'ai exclu non valide signature de nom fort de nos assemblées, depuis le .NET des Assemblages à partir de la structure elle-même ont été touchés par cet accès refusé erreur de trop.

Enfin j'ai réussi à résoudre le problème de la configuration. Apparemment, l'authentification de l'identité du site web a maintenant pour correspondre à l'identité de l'application de la piscine. Ou IUSR n'a plus suffisamment d'autorisations.

enter image description here

EDIT: 19.07.2018

Avertissement! Ce changement a un effet secondaire:

L'asp-classique de l'événement "Session_OnEnd" n'était plus appelé et donc des ressources, à terme, pourraient ne plus être libérés. Mais il y a un fix pour ça, aussi!

L'ASP-Config-Property "du système.serveur web/asp/runOnEndAnonymously" doit être "faux", alors l'événement se déclenche à nouveau.

enter image description here

EDIT 2: 23.07.2018

Comme Dijkgraaf souligné, Microsoft considère désormais le "comportement" d'un bug. Donc je suppose que ma "solution" devrait maintenant être considéré comme une solution de contournement jusqu'à ce qu'un nouveau patch vient à la rescousse.

18voto

TimP Points 209

Nous avons un pool d'applications sous une identité spécifique, afin de permettre un partage réseau et base de données access. Moi aussi, je pensais que nous étions coincé après la lecture de @keydon la réponse ci-dessus.

Cependant, il y a trois endroits que nous devons configurer l'identité:

  • L'Application de la Piscine doit utiliser l'identité spécifique
  • Le Site "se Connecter en tant Que" - devraient utiliser les "identité du pool d'Applications"
  • L'option Authentification Anonyme, en vertu de la fonctionnalité d'Authentification doivent adopter une "identité du pool d'Applications"

Ce dernier était la chose qui nous manquait ans de ne considérer que les deux premières à-dire que nous mal lu les grands conseils ci-dessus.

8voto

Dijkgraaf Points 7057

Microsoft est conscient du problème et le KO est "Accès Refusé" les erreurs et les applications avec COM activation échoue après l'installation de juillet 2018 de la Sécurité et de la Qualité de correctif Cumulatif de mises à jour .NET Framework

Cela a eu des répercussions sur BizTalk server, SharePoint, IIS avec ASP classique et .NET application qui utilise l'emprunt d'identité.

Solutions ASP Classique sont comme suit

IIS Hébergé ASP Classique de l'appel de la fonction CreateObject pour .NET COM les objets peuvent recevoir un "composant ActiveX ne peut pas créer l'objet" d'erreur:

  • Si votre site web utilise l'Authentification Anonyme: Changer le Site Web Anonyme les informations d'Authentification à utiliser le "identité du pool d'Applications".
  • Si votre site utilise l'Authentification de Base ou de l'Authentification Windows: ouvrez une session dans l'application une fois que l'identité du pool d'applications, puis créer une instance de la .NET composant COM. Par la suite d'autres utilisateurs du site sera en mesure de actif au .NET COM composant sans l'échec.
  • Alternativement, si vous utilisez l'Authentification Windows et de l'accès au site web à partir de la console de Windows Serveur sur lequel l'application ASP pistes: la Création d'une instance de la .NET composant COM résout également d'erreur pour les autres utilisateurs du site.

5voto

support3 Points 41

Nous soutenons un Classique ASP site en cours d'exécution dans l'Authentification Anonyme IIS. L'application instancie une DLL .NET de l'objet exposé comme COM visibles.

Après l'application de la sécurité ces dernières Mises à jour de Windows et reboot de l'OS de notre application s'est écrasé avec le message d'erreur suivant:

Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object: 'NameOfObjectInDLL'

Dans notre cas, ce dernier conseil fixe nos problèmes.

IIS > Authentification > Authentification Anonyme - Edition > "identité du pool d'Applications"

screenshot1

5voto

Jose Salort Points 41

Ce n'est que pour confirmer la solution fournie par keydon, combiné par celui fourni par TimP. Et de leur donner merci!!

Dans notre cas, nous avons modifié la suite de 3 pièces (et en plus un 4ème pour les nouvelles autorisations):

  1. L'Authentification du serveur Web propriétés: définissez l'Authentification Anonyme avec "identité du pool d'Applications" au lieu de "Utilisateur Spécifique".

  2. Pool d'applications de "l'Identité" de la propriété: pour "ApplicationPoolIdentity" au lieu de "LocalSystem".

  3. Web Site "se Connecter en tant Que" pour le chemin d'accès physique: réglez sur "l'Application de l'utilisateur (authentification pass-through)" au lieu de "Utilisateur Spécifique".

  4. Ajouter des autorisations pour "Identité du Pool d'Applications nom d'utilisateur" dans le dossier partagé où les fichiers de l'application web sont. Jetez un oeil à https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources

Merci!!!!! (Je suis désolé je ne peux pas voter vos solutions parce que je suis de démarrage, et je n'ai pas de réputation)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X