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

作成者 : Robert McMurray
発行日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))
更新日 : 2009 年 2 月 19 日 (作業者 : robmcm(英語))

Windows Vista に同梱されていた IIS 7.0 の最初のリリースにおける APPL_PHYSICAL_PATH サーバー変数に対する戻り値は、その前後の IIS のバージョンのものとは異なりました。IIS の初期バージョンでは、このサーバー変数にはパスの末尾にバックスラッシュ (\) が付けられていましたが、Windows Vista の最初のリリース バージョンでは、このサーバー変数にはパスのみが含まれていました。これは、Windows Vista Service Pack 1 (SP1) および Windows Server 2008 の最初のリリース バージョンで修正されました。

つまり、Classic ASP の開発者は、APPL_PHYSICAL_PATH サーバー変数の値を使用して Windows Vista の最初のリリース バージョン上のパスを計算する場合、存在しないバックスラッシュ文字を追加する処理を 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 (英語)
http://msdn.microsoft.com/ja-jp/library/ms524602(en-us).aspx (英語)