Erreur d’objet serveur ASP 0177 :80040154

Cet article vous aide à résoudre l’erreur qui se produit lorsque vous tentez d’exécuter des pages Active Server qui utilisent Server.CreateObject pour instancier un composant ActiveX.

Version d’origine du produit : Microsoft Active Server Pages
Numéro de la base de connaissances d’origine : 175804

Symptômes

Lorsque vous tentez d’exécuter une page ASP (Active Server Pages) qui utilise Server.CreateObject pour instancier un composant ActiveX, le message d’erreur suivant s’affiche :

Server object error 'ASP 0177:80040154'
Server.CreateObject Failed
/<path>/<yourasp.asp><line #>
The call to Server.CreateObject failed. The request object instance Cannot be created.

Cause

Voici quelques-unes des causes courantes de cette erreur :

  • Votre contrôle n’est pas inscrit correctement.

  • L’utilisateur connecté, généralement le compte anonyme ne dispose pas des autorisations suffisantes pour exécuter le contrôle. Dans de nombreux cas, le compte de connexion anonyme (IUSR_<machine>) ne dispose pas des autorisations appropriées sur certains Directories/Files composants ou le composant spécifique et ses dépendances. Bien que moins fréquent, si les autorisations du Registre pour certaines clés ne sont pas définies correctement, cela entraîne l’échec de l’initialisation du contrôle.

  • Le groupe Tout le monde a été supprimé de l’autorisation LECTURE sur certaines clés de Registre en raison de la notion erronée selon laquelle Tout le monde signifie TOUT LE MONDE, alors qu’en réalité, il s’agit simplement de tous les utilisateurs validés sur .Domain/machine

  • Dans le cas d’une base de données de fichiers, telle qu’Access ou FoxPro, le répertoire contenant les fichiers de base de données ne fournit pas les autorisations suffisantes pour l’utilisateur authentifié.

Résolution

Avertissement

Les éléments suivants supposent une connaissance d’Internet Information Server et de la modification du Registre. Il est toujours recommandé de sauvegarder le Registre avant d’apporter des modifications.

Étant donné que cette erreur est associée à des paramètres d’autorisation incorrects sur les fichiers ou les paramètres du Registre, vous devez effectuer les étapes suivantes :

  1. Découvrez qui est l’utilisateur authentifié. Pour déterminer l’utilisateur en cours d’authentification, ajoutez le code suivant en haut de votre page ASP :

     <%
     Response.Write("LOGON_USER: " & _
     Request.ServerVariables("LOGON_USER"))
     %>
    

    Si est LOGON_USER vide, vous êtes authentifié en tant que IUSR_machine. Sinon, affiche LOGON_USER le <domain\user> nom de l’utilisateur authentifié qui tente de créer l’objet.

  2. Vérifiez que l’utilisateur (ou le groupe) authentifié dispose de l’autorisation sur les répertoires, fichiers et clés de Registre nécessaires. Cela nécessite une connaissance des répertoires, des fichiers et des clés de Registre spécifiques au contrôle. Vous trouverez ci-dessous une liste des conditions requises pour les objets de données ActiveX.

Autorisations de répertoire/fichier pour le cas spécifique à ADO

\InetPub - IUSR_<machine> READ
\InetPub\wwwroot - IUSR_<machine> READ
\Program Files\Common Files\System\ADO - IUSR_<machine> READ
\Program Files\Common Files\System\OLE DB - IUSR_<machine> READ
\Program Files\Common Files\ODBC\Data Sources -IUSR_<machine> READ
\WinNT - IUSR_<machine> CHANGE
\WinNT\System32 - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp\Cmpnts - IUSR_<machine> READ
\WinNT\Temp - IUSR_<machine> CHANGE

Autorisations du Registre pour un cas spécifique à ADO

Vérifiez que les autorisations suivantes sont définies sur les clés répertoriées ci-dessous :

Autorisations :

<machine>\Administrator      - Full Control  
Creator Owner                - Full Control  
Everyone                     - READ  
INTERACTIVE                  - Special Access (Query Value, Set Value, Create Subkey,
                                               Enumerate Subkeys, Notify, Delete)  
SYSTEM                       - Full Control

Clés:

HKEY_CLASSES_ROOT
\LICENCES
\CEDD4F80-B43C-11cf-837C-00AA00573EDE
HKEY_CLASSES_ROOT
\ADODB.Command
\ADODB.Connection
\ADODB.Parameter
\ADODB.Recordset

Autorisations de fichier et de dossier pour le cas de base de données

Vérifiez que les fichiers de base de données et les dossiers contenant les fichiers de base de données fournissent des autorisations de lecture, d’écriture et d’exécution pour l’utilisateur ou le groupe authentifié.

Étapes générales de résolution des problèmes

  1. Vérifiez si ASP est installé correctement en exécutant ADO à l’aide Server.CreateObject de l’exemple dans le dossier Feuille de route Active Server Pages\Autres exemples.
  2. Assurez-vous que toutes les DLL sont inscrites avec Regsvr32.
  3. Assurez-vous qu’il n’existe pas plusieurs versions de la DLL inscrites et que l’entrée du Registre pointe vers la bonne.
  4. Vérifiez que toutes les DLL utilisent le modèle de thread d’appartement et ne sont pas monothread (voir remarque 2 ci-dessous).
  5. Vérifiez que le contrôleur de domaine principal (PDC) a donné à tout le monde accès à cet ordinateur à partir des droits réseau . Si IIS est un contrôleur de domaine principal, assurez-vous que dispose également de IUSR_<machine> ces droits, ainsi que des droits Se connecter localement .

Étapes case activée autorisations rapides

  1. Forcez l’anonyme en désactivant NT Challenge and Response (NTCR) de base et NT dans IIS Service Manager.
  2. Ajoutez temporairement au IUSR_<machine> groupe Administrateurs pour voir s’il fait une différence. Si c’est le cas, le problème est un problème d’autorisations.
  3. Activez l’audit NT (comme indiqué ci-dessous) et réessayez.

Autorisations case activée étapes pas si rapides

  1. Forcez l’anonyme en désactivant NT Challenge and Response (NTCR) de base et NT dans IIS Service Manager.
  2. Créez un compte d’utilisateur NT appelé IUSR_Test.
  3. Accordez IUSR_Test contrôle total du lecteur racine et ces autorisations en cascade. Par la suite, IUSR_Test peuvent être supprimés, ce qui les supprime de tous les répertoires ou fichiers.
  4. Activez l’audit NT (comme indiqué ci-dessous) et réessayez.

Activer l’audit NT :

Pour activer l’audit, ouvrez le Gestionnaire d’utilisateurs et sélectionnez Audit dans le menu Stratégies . Sélectionnez l’échec d’accès aux fichiers et aux objets . Ouvrez Windows NT Explorer et sélectionnez la racine de votre disque dur. Cliquez avec le bouton droit et sélectionnez propriétés. Sélectionnez l’onglet Sécurité et appuyez sur le bouton Audit . Ajoutez l’utilisateur qui vous intéresse (celui renvoyé par la page ASP ou IUSR_machine) et sélectionnez toutes les zones de case activée d’échec. Veillez à appliquer ces paramètres à tous les dossiers. Utilisez la observateur d'événements pour voir les échecs d’accès (sélectionnez Sécurité dans le menu Journal). Veillez à désactiver l’audit lorsque vous avez terminé d’apporter des modifications.

REMARQUE 1 : Jet utilise les SYSTEM TEMP variables d’environnement et pour TMP spécifier l’emplacement des fichiers temporaires créés pendant les opérations JET. Par défaut, ces variables d’environnement sont définies pour les utilisateurs et ne sont pas des paramètres à l’échelle du système. Pour les configurer, vous pouvez effectuer l’une des deux opérations suivantes.

  • Option 1. Dans le autoexec.bat, ajoutez quelque chose de similaire aux deux lignes suivantes :

    Set TEMP=C:\Temp
    Set TMP =C:\Temp
    
  • Option 2. Cliquez avec le bouton droit sur Poste de travail :

    1. Cliquez sur Propriétés et sélectionnez l’onglet Environnement.

    2. Cliquez sur une entrée dans la zone Liste des variables système (celle située en haut).

    3. Dans le contrôle Variable et Modification de valeur , tapez ce qui suit :

      Variable = Temp
      Value = C:\Temp
      
    4. Cliquez sur Définir. Vous voyez maintenant TEMP que a été ajouté à la liste des variables système.

    5. Répétez le processus pour la TMP variable.

    6. Redémarrez l’ordinateur pour que les modifications prennent effet. En outre, il a été constaté que IUSR_<machine> nécessite l’autorisation CHANGE dans le répertoire WinNT pour créer des fichiers temporaires lors de l’utilisation du pilote de base de données Access.

REMARQUE 2 : Par défaut, ASP crée des clients d’appartement à thread unique, ce qui signifie que seuls les serveurs inproc d’appartement à thread unique reçoivent le contexte de sécurité souhaité transmis par IIS. Tous les autres modèles de thread sont exécutés dans le contexte SYSTEM. Cela signifie qu’une DLL utilisant le modèle monothread démarre dans le contexte de sécurité de SYSTEM, et non comme prévu comme utilisateur authentifié.