最近莫名其妙地做起ASP项目来了,今天架了一个IIS,装Visual Studio 6之前用UE写了几个简单典型的ASP页面试了一把,比较顺利。后来装Visual Studio 6,主要是用InterDev,顺便也装了VB和其他一些必要组件,然后顺手把Visual Studio SP6也装上了,然后问题也出来了--ASP页面无法访问了。
系统日志记录类似如下:
サーバーはアプリケーション '/LM/W3SVC/1/ROOT' の読み込みに失敗しました。
エラーは ‘エラー : 一般のアクセスが拒否されました’ でした。
このメッセージに関する追加情報については、次の Microsoft オンライン サポートのサイト
このメッセージに関する追加情報については、次の Microsoft オンライン サポートのサイト
を参照してください。
http://www.microsoft.com/contentredirect.asp
首先可以肯定的是和Visual Studio 6还有SP6脱不了关系,第一步是担心缺少某些必要的组件,于是把VC++也装上了,无效;第二步是考虑IIS 5的某些依赖组件是否被替换成了错误的版本,于是重装了IIS 5,同样无效;开始气急败坏。
Google,搜索简体中文关键字[iis asp 故障],搜出来一大堆东西,对照了一下,显然不对路数;Google,搜索全部语言关键字[
一般のアクセスが拒否されました],没有匹配的结果,把[使用偏好]中的语言设置为日语,再搜[
一般のアクセスが拒否されました],总算找到我想要的东西了,后来顺藤摸瓜一直抄到了MS的老巢里,找到了明确的答案,地址:[
http://support.microsoft.com/default.aspx?scid=kb;ja;842329 ],文章标题:
[ [BUG] Visual Studio 6.0 Service Pack 6 をインストール後に ASP ページを表示すると "HTTP 500 - 内部サーバー エラー" エラー メッセージが表示される ]
显然MS已经承认该问题为SP6导致的BUG。OK,看比尔大叔是怎么说的:
この問題は、Visual Studio 6.0 SP6 のセットアップ プログラムにより、Mfc42.dll ファイルへのアクセスが許可されたユーザーとグループの一覧から Everyone グループが削除されることが原因で発生します。
Microsoft インターネット インフォメーション サービス (IIS) では、アウト プロセス アプリケーションの起動に IWAM_ComputerName ユーザー アカウントが使用されます。しかし、Visual Studio のセットアップ プログラムにより、Mfc42.dll ファイルへのアクセスが許可されたユーザーとグループの一覧から Everyone グループが削除されたため、IWAM_ComputerName ユーザー アカウントには、Mfc42.dll ファイルに対する読み取りと実行のアクセス許可がなくなります。
原因大致为SP6在更新组件的时候将mfc42.dll的NTFS权限中的Everyone的读权限咔嚓掉了,因为IIS所使用的用户[IWAM_XXXXXX]所属组为Guest,所以就导致IIS服务进程无权访问mfc42.dll,想想MS的东西没了mfc42.dll,就像美国大兵断了粮啊。
这时候,[
一般のアクセスが拒否されました]这个错误消息就可以很好地被理解了,至于解决办法,当然是手工恢复
[IWAM_XXXXXX]对mfc42.dll的访问权限啦。下面是比尔大叔给的建议:
1. エクスプローラで、Mfc42.dll ファイルを見つけます。
2. Mfc42.dll ファイルを右クリックし、[プロパティ] をクリックします。[Mfc42.dll のプロパティ] ダイアログ ボックスが表示されます。
3. [セキュリティ] タブをクリックし、[追加] をクリックします。[ユーザー、コンピュータ、またはグループの選択] ダイアログ ボックスが表示されます。
4. [名前] ボックスの一覧から [IWAM_ComputerName] を探して、クリックします。
5. [追加] をクリックし、[OK] をクリックします。
6. [読み取りと実行] の隣にある [許可] チェック ボックスがオンになっていることを確認し、[OK] をクリックします。
2. Mfc42.dll ファイルを右クリックし、[プロパティ] をクリックします。[Mfc42.dll のプロパティ] ダイアログ ボックスが表示されます。
3. [セキュリティ] タブをクリックし、[追加] をクリックします。[ユーザー、コンピュータ、またはグループの選択] ダイアログ ボックスが表示されます。
4. [名前] ボックスの一覧から [IWAM_ComputerName] を探して、クリックします。
5. [追加] をクリックし、[OK] をクリックします。
6. [読み取りと実行] の隣にある [許可] チェック ボックスがオンになっていることを確認し、[OK] をクリックします。
如果你不太细究各用户对于mfc42.dll的访问权限的话,可以直接设置为Everyone可读,以避免以后出现类似的问题。恢复[IWAM_XXXXXX]对mfc42.dll的访问权限后,问题迎刃而解!只是,就这破问题居然也浪费了我两三个小时时间,现在写出来,希望大家不要走同样的弯路。
鄙人环境如下:
Windows 2000 Japanese Profession Edition with SP4
Visual Studio 6 English Enterprise Edition with SP6
IIS 5.0
估计受影响的搭配为Windows 2000和VS6.0+SP6,同时系统盘分区格式为NTFS,FAT32不受影响。