#exec

#exec 指令运行指定的应用程序或 shell 命令,并将输出(标准输出或 ISAPI WriteClient 数据)发送到客户端浏览器。必须使用 HTML 注释分隔符将指令括起来。

此指令仅可用于 STM 网页,无法用于 ASP 网页。没有相应的 ASP 脚本方法可以将多个 CGI 脚本或 ISAPI 应用程序的输出包含到一个网页中。

语法

<!-- #exec CommandType = CommandDescription -->

参数

CommandType

指定命令类型。命令可以是下列某种类型:

命令类型 含义
CGI 运行一个应用程序,如 CGI 脚本、ASP 应用程序或 ISAPI 应用程序。CommandDescription 参数是一个包含应用程序的完整虚拟路径的字符串,其后跟问号 (?) 及传递给应用程序的任何参数。参数由加号 (+) 分隔。由于运行 ISAPI 应用程序只是 SSI 文档处理的一部分,所以 ISAPI 应用程序受到如下限制:

如果任何 ISAPI 扩展试图通过 ServerSupportFunction 回调函数发送 URL 或进行重定向,都会将消息放入 HTML 流,而不会发送/重定向。

SSI 解释程序 (Ssinc.dll) 将无限期地等待应用程序返回 HSE_STATUS_PENDING,除非调用 ServerSupportFunction 完成会话。

可以在 MSDN 库中(在 ISAPI 参考下)找到有关 ServerSupportFunction 的说明。

CMD 运行 shell 命令。CommandDescription 参数是一个包含 shell 程序的完整物理路径的字符串,后跟任何命令行参数,这些参数由空格分隔。如果未指定完整路径,Web 服务器将搜索系统路径。

默认情况下将禁用此指令,因为它会威胁网站安全。要启用此指令,请将 DWORD 注册表值 SSIEnableCmdDirective 添加到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters 项,并将它设置为 1。所有使用了 #exec 指令的 STM 文件,其所在的 Web 文件夹都应禁用匿名访问。

有关使用注册表的一般信息,请参阅“注册表”。

 

要点   包含此指令的文件必须使用已映射到 SSI 解释程序的扩展名。否则,Web 服务器将不处理此指令。默认情况下,文件扩展名 .stm、.shtm 和 .shtml 将映射到 SSI 解释程序 (ssinc.dll)。

使用 #echo 指令的 STM 网页既可以自运行,也可以通过 Response.Redirect 从 ASP 网页调用它来运行。用 Server.Transfer、Server.Execute 或 #include 从 ASP 网页中调用 STM 网页是行不通的,因为这样会迫使 STM 网页通过 asp.dll 而不是通过 ssinc.dll 进行解释。

如果安装了 Internet 信息服务管理单元,则可以修改默认扩展名映射并添加新映射,请参阅设置应用程序映射。由于不能将一个文件扩展名映射到多个可执行文件,所以不能在 ASP 文件中使用此指令。ASP 文件已映射到 asp.dll,并且必须保持此状态。

示例

以下示例使用 CGI 命令类型运行 ASP 网页,因此不需要向注册表添加值。使用 Server.Execute、Server.Transfer 或 #include 从 Exec.asp 运行 Test.asp 效果可能会更好。但在这里,我们只是要讲解 STM 文件中的 #exec 指令。

--- Exec.asp ---

<FORM NAME="RunExec" METHOD="POST" ACTION="Exec.asp">
<INPUT TYPE="SUBMIT" VALUE="Run the #exec Directive" NAME="RunExec">
</FORM>
<%
If Len(Request.Form("RunExec")) Then
  Response.Redirect("Exec.stm")
End If
%>

--- Exec.stm ---

<H3>Inside Exec.stm</H3>
<!-- #exec CGI="/testfolder/test.asp?test=Hello" -->
<FORM NAME="Return" METHOD="POST" ACTION="Exec.asp">
<INPUT TYPE="SUBMIT" VALUE="Return to Previous Page" NAME="Return">
</FORM>

--- Test.asp ---

<%
Response.Write "<BR>Inside Test.asp.<BR>"
Response.Write "Test = " & Request.QueryString("Test") & ".<BR>"
%>

© 1997-2001 Microsoft Corporation. 保留所有权利。