## #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. 保留所有权利。