サーバー オブジェクト エラー ASP 0177:80040154

この記事は、ActiveX コンポーネントのインスタンス化に使用 Server.CreateObject する Active Server Pages を実行しようとしたときに発生するエラーを解決するのに役立ちます。

元の製品バージョン: Microsoft Active Server Pages
元の KB 番号: 175804

現象

ActiveX コンポーネントのインスタンス化に使用 Server.CreateObject する Active Server Pages (ASP) ページを実行しようとすると、次のエラー メッセージが表示されます。

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.

原因

このエラーの一般的な原因を次に示します。

  • コントロールが正しく登録されていません。

  • ログオン ユーザー (通常は匿名アカウント) には、コントロールを実行するための適切なアクセス許可がありません。 多くの場合、匿名ログイン アカウント (IUSR_<machine>) には、特定または特定 Directories/Files のコンポーネントとその依存関係に対する適切なアクセス許可がありません。 頻度は低くなりますが、特定のキーのレジストリアクセス許可が正しく設定されていない場合、コントロールの初期化に失敗します。

  • Everyone グループは、EveryoneANYONE を意味するという誤った考えにより、特定のレジストリ キーに対する READ アクセス許可を持つことから削除されました。実際には、 で検証されたすべてのユーザーDomain/machineを意味します。

  • Access や FoxPro などのファイル データベースの場合、データベース ファイルを含むディレクトリは、認証されたユーザーに十分なアクセス許可を提供しません。

解決方法

警告

次は、インターネット インフォメーション サーバーとレジストリの編集に関する知識を前提としています。 変更を加える前に、レジストリをバックアップすることをお勧めします。

このエラーは、ファイルまたはレジストリ設定の不適切なアクセス許可設定に関連付けられているため、次の手順を実行する必要があります。

  1. 認証されたユーザーを確認します。 認証されているユーザーを確認するには、ASP ページの上部に次のコードを追加します。

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

    LOGON_USERが空白の場合は、 としてIUSR_machine認証されます。 それ以外の LOGON_USER 場合は、オブジェクトを作成しようとしている認証されたユーザーの名前が表示されます <domain\user>

  2. 認証されたユーザー (またはグループ) に、必要なディレクトリ、ファイル、レジストリ キーに対するアクセス許可があることを確認します。 これには、コントロールに固有のディレクトリ、ファイル、レジストリ キーに関する知識が必要です。 ActiveX データ オブジェクトの要件の一覧を次に示します。

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

ADO 固有のケースのレジストリアクセス許可

次に示すキーに対して、次のアクセス許可が設定されていることを確認します。

アクセス許可:

<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

キー:

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

データベース ケースのファイルとフォルダーのアクセス許可

データベース ファイルと、データベース ファイルを含むフォルダーが、認証されたユーザーまたはグループの 読み取り書き込み実行 のアクセス許可を提供していることを確認します。

一般的なトラブルシューティング手順

  1. Active Server Pages のロードマップ\その他のサンプル フォルダーでサンプルを使用して Server.CreateObject ADO を実行して、ASP が正しくインストールされているかどうかを確認します。
  2. すべての DLL が に Regsvr32登録されていることを確認します。
  3. 登録されている DLL のバージョンが複数なく、レジストリ エントリが正しいバージョンを指していることを確認します。
  4. すべての DLL がアパートメント スレッド モデルを使用していて、シングル スレッドではないことを確認します (下記の注 2 を参照してください)。
  5. プライマリ ドメイン コントローラー (PDC) によって、すべてのユーザーに ネットワーク権限からこのコンピューターへのアクセス権が 付与されていることを確認します。 IIS が PDC の場合は、これらの権限とローカルログオン権限も持っていることを保証IUSR_<machine>します。

クイック アクセス許可チェック手順

  1. IIS Service Managerで Basic と NT Challenge and Response (NTCR) をクリアして匿名を強制します。
  2. を管理者グループに一時的に追加 IUSR_<machine> して、違いがあるかどうかを確認します。 その場合、問題はアクセス許可の問題です。
  3. NT 監査を有効にして (以下に示すように) やり直してください。

手順チェックアクセス許可がそれほど速くない

  1. IIS Service Managerで Basic と NT Challenge and Response (NTCR) をクリアして匿名を強制します。
  2. IUSR_Testという名前の新しい NT ユーザー アカウント 作成します。
  3. ルート ドライブ IUSR_Test フル コントロールを付与し、これらのアクセス許可を連鎖します。 その後、 IUSR_Test を削除して、任意のディレクトリまたはファイルから削除できます。
  4. NT 監査を有効にして (以下に示すように) やり直してください。

NT 監査を有効にする:

監査を有効にするには、ユーザー マネージャーを開き、[ポリシー] メニューから [監査] を選択します。 [ファイル] と [オブジェクト アクセスの失敗] を選択します。 Windows NT エクスプローラー開き、ハード ドライブのルートを選択します。 プロパティを右クリックして選択 します。 [ セキュリティ ] タブを選択し、[監査] ボタン 押します。 目的のユーザー (ASP ページまたはIUSR_machineによって返されるユーザー) を追加し、すべてのエラー チェック ボックスを選択します。 これらの設定をすべてのフォルダーに適用してください。 イベント ビューアーを使用して、アクセス エラーを確認します ([ログ] メニューから [セキュリティ] を選択します)。 変更が完了したら、監査をオフにしてください。

注 1: Jet では、 と TMP 環境変数をSYSTEM TEMP使用して、JET 操作中に作成される一時ファイルの場所を指定します。 既定では、これらの環境変数はユーザーに対して定義され、システム全体の設定ではありません。 これらを設定するには、次の 2 つの操作のいずれかを実行します。

  • オプション 1。 autoexec.batで、次の 2 行のようなものを追加します。

    Set TEMP=C:\Temp
    Set TMP =C:\Temp
    
  • オプション 2。 [マイ コンピューター] を右クリックします。

    1. [ プロパティ ] をクリックし、[ 環境] タブを選択します。

    2. [ システム変数リスト ] ボックス (上部にあるエントリ) をクリックします。

    3. [ 変数] コントロールと [値の編集] コントロールに、次のように入力します。

      Variable = Temp
      Value = C:\Temp
      
    4. [設定] をクリックします。 TEMPシステム変数の一覧にが追加されました。

    5. 変数のプロセスを繰り返します TMP

    6. マシンを再起動して変更を有効にします。 さらに、Access データベース ドライバーを使用するときに一時ファイルを作成するには、WinNT ディレクトリに対する CHANGE アクセス許可が必要であることがIUSR_<machine>判明しました。

注 2: 既定では、ASP はシングル スレッド アパートメント クライアントを作成します。つまり、IIS によって渡される目的のセキュリティ コンテキストが与えられるのはシングル スレッドアパートメントの inproc サーバーのみです。 その他のすべてのスレッド モデルは、SYSTEM コンテキストで実行されます。 つまり、単一スレッド モデルを使用する DLL は SYSTEM のセキュリティ コンテキストで起動し、認証されたユーザーと同じようには起動しません。