有关 Internet 信息服务的 5 个热点问题及其解答

| 无权运行 CDONTS 应用程序 | |
| 安装 IIS 5.0 后服务器运行失败 | |
| 如何从命令提示符重新启动 IIS |
问:我试图在我的站点上使用以下脚本。
(http://www.microsoft.com/technet/community/columns/insider/iisi1201.mspx (英文))
<%
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = "yourname@youremail.com"
objMail.Subject = "A Sample mail sent with CDONTS"
objMail.To = "someone@somwhere.com"
objMail.Body = "Here is the message."
objMail.Send
set objMail = nothing
%>
但是我的服务器生成如下错误代码:
Microsoft VBScript 运行时错误“800a0046"- 权限被拒绝。
答:CDONTS 设计为在 Windows NT 4.0 上,使用 IIS 4.0 以进程内组件的形式运行。当应用程序在进程外运行时,它使用 IWAM_<计算机名> 帐户,运行在 MTS.EXE(IIS 4.0)或是 DLLHOST.EXE(IIS5)进程中。当在进程外运行应用程序时,IWAM 帐户可能需要访问文件和系统资源。对于这样的 CDONTS 对象,IWAM 帐户需要访问系统的机器密钥(参见 Microsoft 知识库文章 318478 (英文))以及 Inteinfo\Mailroot 文件夹中的某些文件夹(参见 Microsoft 知识库文章 260985 (英文))。
有了这些信息后,可能还需要做一些其他操作。首先,作为一种策略,您应该重新编写应用程序的代码,改为使用 CDOSYS 对象(请参见 2001 年 12 月份的 IIS 专栏 (英文))。这将确保它在今后也受支持,因为 Windows 2000 或 Windows Server 2003 上不会安装 DOSYS 对象。这也许能,但也许不能解决您的问题。其次,如果 CDONTS 应用程序在进程中而不是进程外运行,那么您几乎可以确定问题与 IWAM 用户帐户权限有关。由于安全方面的考虑,也许无法或是不希望在进程中运行 CDONTS 应用程序,但是这样可以避免与 IWAM 帐户相关的权限问题。确认 Mailroot 和机器密钥拥有适当的权限。再其次,如果启动 ASP 脚本的用户对 Mailroot\Pickup 文件夹没有适当的权限,那么也可能会出现这样的错误消息。默认情况下,MailRoot 文件夹的权限被设置为 Everyone – 完全控制,但这个权限过高。因此,我建议将已通过身份验证的用户对此文件夹的权限设置为读取/写入,而 System 和 Administrators 则设置为“完全控制"。这将允许 IUSR 和 IWAM 用户以及其他用户帐户可以将邮件写入 SMTP 文件夹。您还应该将 IUSR_<计算机名> 对这些文件夹的权限设置为拒绝执行。如果已经运行了 IIS Lockdown 工具 (英文),那么可以使用 Web Anonymous Users 本地组来实现这一点。不要拒绝 Web Applications 组的写入 权限。
问:在 IIS 5.0 上,我们希望在应用程序的默认保护设置下——中(共用)——运行应用程序。如此配置后,我们收到以下错误消息:
错误代码 800800005 - 服务器运行失败。
我们尝试过卸载,然后重新安装 IIS,但是仍然出现此消息。我们应该如何解决这个问题呢?
答:这条消息通常表明 IIS 的设置或安装过程中存在不正确的操作。请查看 IIS5.log 文件(位于 %systemroot% 文件夹中,而该文件夹通常位于 \Winnt 下),并在其中搜索单词“FAIL"。这也许能发现问题所在。这条消息出现时,很可能会伴随着某些事件查看器消息,而这些消息可以提供非常有价值的信息。另外,值得尝试运行 Synciwam.vbs,这个文件默认情况下位于 \Inetpub\Adminscripts 文件夹中。最后,尝试一个众所周知的小技巧:打开“控制面板",然后单击“添加/删除 Windows 程序"。不要做任何更改,然后单击“确定"。这个操作将会使 Windows 2000 对 IIS 和 COM+ 对象执行某些验证测试。
问:我该如何从命令提示符重新启动 IIS?
答:如果在 Windows 2000 中打开服务控制台,然后依次单击“IIS Admin Service"以及“依存关系"选项卡,您会发现 IIS Admin Service 依赖于 RPC 和 Protected Storage 服务,而 SMTP、World Wide Web Publishing Service 以及 FTP 和 NNTP(图中未显示)又依赖于它。如果停止 IIS Admin Service,这些相互依存的服务也将停止。然而,当您启动 IIS Admin Service 时,这些相互依存的服务并不会自动启动(IIS 4 中也是如此)。
要停止和启动 IIS,您必须按顺序关闭和启动所有 IIS 服务。
有多种方法可完成此操作。在 IIS 5 上,您可以从命令提示符下发出 IISRESET 命令,这将停止然后启动 IIS 和相关服务。IISRESET 有多个开关选项,例如 REBOOTONERROR 和 NOFORCE,可从远程服务器调用这条命令。IIS 4 中没有 IISRESET 命令。
但是您可以在命令提示符下运行 NET STOP IISADMIN /y、批处理文件或脚本。这可以自动停止所有和 IISADMIN 服务具有依存关系的服务。关闭时,依存服务被设置为自动关闭。但是启动 IISADMIN 服务,这些依存服务并不会自动启动。然而,如果您启动某一个依存服务,IISADMIN 服务会自动启动。因此,要重新启动服务器,您可以运行一系列命令来启动每个 IIS Internet 协议服务。例如:
NET START W3SVC
NET START SMTPSVC
NET START FTPSVC
等等,IISADMIN 服务将会自动启动。
在以这种方式重新启动服务时,可能会花费较长的时间。如果您的元数据库非常大,那么要完全启动 IISADMIN 服务要花较长的时间。您可能需要在启动脚本中设置一些停顿,以很好地管理时间,不过通常情况下不需要这样做。
除上述方法外,您还可以编写 VBScript、perl 或 WMI 脚本来执行相同的功能。特别值得一提的是,Windows 2000 和 Window Server 2003 上的 WMI 具有许多服务器管理功能。您可以参考 2003 年 1 月份的脚本故事专栏,其中提供了 WMI 示范脚本,该脚本可以监控 Web 服务器,了解 IISADMIN 服务是否在运行,并可以自动重新启动 W3SVC(如果它没有启动的话)。
将您的问题提交给 IIS Insider。挑选出的问题会连同答案一起刊登在下一期的 IIS Insider 专栏中。
要获取 IIS Insider专栏所有的问题与解答,请单击此处。