web-dev-qa-db-ja.com

32ビットWindowsおよびIIS 7でのServer.CreateObject()の失敗

Windows 7 32ビット、IIS 7.5.760016385

Visual Basic6.0でDLLを作成し、クラシックASPコード内から使用しようとしています:

set obj = Server.CreateObject("a.b")

次のエラーが発生します。

006 ASP 0178
Server.CreateObjectアクセスエラー
アクセス許可の確認中にServer.CreateObjectの呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。
err.number = -2147024891

Iusr_cmpnameユーザーを作成し、このASPページのデフォルトのWebサイトと仮想ディレクトリで権限を付与してみました。dllをREGSVR32で実行しました。

「Windows機能のオンとオフを切り替える」に移動し、IIS/World Wide Webサービス/アプリケーション開発機能を選択してから、ASP、ASP.net、ISAPI拡張機能、およびISAPIファイラーをオフにしました。

私はさまざまなニュースグループで多くのリードをフォローしてきましたが、この問題を乗り越えることができます。昨年、1年半前にこれを試しましたが、同じ問題がありました。この問題を克服できなかったので、WindowsNTに戻りました。 NTではこの問題は発生しませんでした。

現在、Windows 7に再び移行できるように、これを乗り越えようとしています。多くの人がこの問題を抱えているようですが、彼らが見つけて投稿した解決策は、私が必要としているものではないようです。

どんな助けでもありがたいです。ありがとうございました。

11
user1894838

この問題は、IISファイルシステム上のカスタムVB6Active Xdllにアクセスできないことに関連しているようです。作成したカスタムdllをデフォルトと同じディレクトリに登録しました。 Webアプリケーションであり、オブジェクトを作成するためにASPを取得できました。

これが私がしたことです:

  • Windows 7 Professional 64ビット、SP1のクリーンインストール。

  • Windowsを有効にするASP機能

  • この手順は64ビットWindowsの場合のみ-IIS Managerを使用して、デフォルトのアプリケーションプールに対して32ビットアプリケーションを有効にします。

enable 32-bit application pool

  • 2つの入力番号を追加して結果を返す単純なVB6Active X dll(クラス名は「CXUtils.Utils」)を作成します。

Utils.cls:

Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer     
    Sum = a + b
End Function
  • これは重要な手順です。管理コマンドプロンプトで、Vb6 Active X dllをデフォルトのWebアプリケーションの場所C:\ inetpub\wwwrootに登録します。

Register Custom VB6 DLL

  • 上からdllをインスタンス化する単純なaspページを作成してインストールします。インストール場所は、デフォルトのWebアプリケーションの場所C:\ inetpub\wwwroot

Default.asp:

<%@ Language=VBScript %>
<%
Option Explicit
Response.Expires = 0
Response.Expiresabsolute = Now() - 1 
Response.AddHeader "pragma","no-cache" 
Response.AddHeader "cache-control","private" 
Response.CacheControl = "no-cache" 

Function Sum(a, b)
    Sum = a + b
End Function

Function Sum2(a, b)
    Dim adder
    set adder = Server.CreateObject("CXUtils.Utils")
    Sum2 = adder.Sum(a, b)
    set adder = nothing
End Function
%>
<html>
    <head>
        <title>Add</title>
    </head>
    <body>
    <b>2 + 3</b> = <%= Sum(2,3) %><br />
    <b>3 + 4</b> = <%= Sum2(3,4) %>
    </body>
</html>
  • Webアプリを参照して、結果を確認します

Sample asp page results

これがすべてコンパイルされない場合はお詫びします-フォーマットを正しく表示するために多くの編集が行われました。

4
chue x

Procmon を使用してアクセス違反を見つけることを強くお勧めします。私は何年も前に同様の問題を抱えていました、そしてこれがそれを解決した唯一のことでした。そのシナリオでは、システムの一時フォルダーに対するアクセス許可が不足していることが判明しました。

Procmonの結果を投稿すると、この回答を修正してさらに役立つようにすることができる場合があります。

4
David Pfeffer

動作する可能性のある別のアプローチは、DLLをDCOMアプリケーションとしてdcomcnfgにインストールすることです。これは、異なる資格情報で実行されます。

0
Negarrak

このページは、問題がVBランタイムに割り当てられたアクセス権である可能性があることを示唆しています。Msvbvm60.dllの読み取りおよび実行権限を全員に割り当ててみてください。

http://support.Microsoft.com/kb/27801

0
Peter Ruderman

私も同じような問題を抱えていたと思います。私はVB6で実行されていたVB6 DLLでインタラクティブにデバッグコードを試みていましたIDEクラシックASPアプリケーションから。アプリケーションがServer.CreateObjectステートメントを実行すると、次のエラーが返されました。

サーバーオブジェクト:006〜ASP 0178〜Server.CreateObjectアクセスエラー〜アクセス許可の確認中にServer.CreateObjectの呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。

ところで、私はWindows7環境でIIS 7.5を実行しています。問題は、VB ASP DCOMでのデバッグおよび/またはIISではなくDCOMでの不適切なアクセス許可。記事のURLは http://support.Microsoft.com/kb/q259725 。回避策#1を実装しました。後で再起動すると、ASPからVB DLLコードにステップインできます。Microsoft用に1つチョークして、私はそれをあまり頻繁に言いません:-)

0
JCBishop