次の方法で共有


Windows Vista RTM での APPL_PHYSICAL_PATH サーバー変数

作成者: Robert McMurray

Windows Vista に付属していた IIS 7.0 の元のリリースでは、APPL_PHYSICAL_PATH サーバー変数の値に対して、以前または以降のバージョンの IIS から返されたものとは異なる値が返されました。 以前のバージョンの IIS では、このサーバー変数にはパスに円記号 "" 文字が付加されていましたが、Windows Vista の元のリリース バージョンでは、このサーバー変数にはパスのみが含まれていました。 これは、Windows Vista Service Pack 1 (SP1) および Windows Server 2008 の元のリリース バージョンで修正されました。

つまり、従来の ASP 開発者で、元のリリース バージョンの Windows Vista のパスを計算するために APPL_PHYSICAL_PATH サーバー変数の値を使用している場合は、ASP コードでは、そのアプリケーションを別のコンピューターに移行する前に、不足している円記号を考慮する必要があります。

たとえば、次の ASP コードは、現在のアプリケーションの App_Data フォルダー内の Microsoft Access データベースの場所を計算します。

strCN = "DRIVER={Microsoft Access Driver (*.mdb)};" & _
        "DBQ=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & _
        "App_Data\example.mdb"
Set objCN = Server.CreateObject("ADODB.Connection")
objCN.Open strCN

IIS 5.1 を使用する Windows XP コンピューターでこのコードをテストしていた場合、このコードは正常に機能していました。 ただし、コンピューターを Windows Vista の元のリリース バージョンにアップグレードした場合、データベースのパスは無効になり、データベースへの接続は失敗します。 たとえば、ASP コードが既定の Web サイトのルート フォルダー内のページにある場合、計算された接続文字列の内容は次のようになります。

DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\inetpub\wwwrootApp_Data\example.mdb

ブラウザーにエラーを送信するように ASP が構成されている場合は、次のエラーが表示されます。

Microsoft OLE DB Provider for ODBC Drivers error '80004005' 

[Microsoft][ODBC Microsoft Access Driver] Disk or network error. 

/example.asp, line 100

Windows Vista のこの問題を解決するには、Windows Vista SP1 をインストールするか、ASP コードで円記号を手動で確認し、必要に応じて円記号を追加することができます。 次に例を示します。

strAP = Request.ServerVariables("APPL_PHYSICAL_PATH")
If Right(strAP,1)<>"\" Then strAP = strAP & "\"
strCN = "DRIVER={Microsoft Access Driver (*.mdb)};" & _
        "DBQ=" & strAP & "App_Data\example.mdb"
Set objCN = Server.CreateObject("ADODB.Connection")
objCN.Open strCN

その他の情報

IIS サーバー変数の詳細については、Microsoft MSDN Web サイトにある次のページを参照してください。

IIS Server Variables
https://msdn.microsoft.com/library/ms524602.aspx