#exec

#exec 지시어는 지정된 응용 프로그램 또는 셸 명령을 실행하고 그 출력 내용(표준 출력 또는 ISAPI WriteClient 데이터)을 클라이언트 브라우저로 보내도록 지시합니다. 지시어는 HTML 설명 구분 기호로 묶어 주어야 합니다.

이 지시어는 HTML 페이지에서만 사용할 수 있으며, ASP 페이지에서는 사용할 수 없습니다. ASP 스크립트 메서드는 웹 페이지에 여러 개의 CGI 스크립트나 ISAPI 응용 프로그램의 출력을 포함하는 유일한 메서드입니다.

구문

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

매개 변수

CommandType

명령 유형을 지정합니다. 사용할 수 있는 명령 유형은 다음과 같습니다.

명령 유형 의미
CGI CGI 스크립트, ASP 응용 프로그램 또는 ISAPI 응용 프로그램과 같은 응용 프로그램을 실행합니다. CommandDescription 매개 변수는 물음표(?) 다음에 나오는 응용 프로그램의 가상 경로와 응용 프로그램에 전달되는 모든 매개 변수를 포함하는 문자열입니다. 각각의 매개 변수는 더하기 기호(+)로 구분됩니다. ISAPI 응용 프로그램 실행은 SSI 문서 처리의 일부에 포함되므로 ISAPI 응용 프로그램에는 다음과 같은 제한 사항이 적용됩니다.

어떤 ISAPI 확장이든 ServerSupportFunction 콜백 함수를 통해 URL을 보내거나 리디렉션을 시도하면, HTML 스트림에 메시지가 표시되고 리디렉션 보내기 작업은 수행되지 않습니다.

세션을 끝내기 위해 ServerSupportFunction을 호출하지 않으면 SSI 인터프리터(Ssinc.dll)는 응용 프로그램이 HSE_STATUS_PENDING을 보낼 때까지 끝없이 기다립니다.  \par

ISAPI Reference의 MSDN Library에 ServerSupportFunction이 문서화되어 있습니다.

CMD 셸 명령을 실행합니다. CommandDescription 매개 변수는 공백으로 구분된 모든 명령줄 다음에 오는 셸 프로그램의 실제 경로 전체를 포함하는 문자열입니다. 전체 경로를 지정하지 않으면 웹 서버는 시스템 경로를 검색합니다.

이 지시어는 웹 사이트의 보안을 위협할 수 있으므로 기본적으로 사용할 수 없습니다. 이 지시어를 사용하려면 DWORD 레지스트리 값 SSIEnableCmdDirective를 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters key에 추가하고, 1로 설정하십시오. #exec 지시어를 사용하는 STM 파일이 있는 모든 웹 폴더에 대해 익명 액세스를 사용할 수 없게 하십시오.

레지스트리 사용에 대한 전반적인 내용은 레지스트리를 참조하십시오.

 \par

중요   이 지시어가 포함된 파일에는 SSI 인터프리터로 매핑되는 파일 확장명을 사용해야 합니다. 그렇지 않으면 웹 서버가 지시어를 처리할 수 없습니다. 기본적으로 .stm, .shtm, .shtml 등의 파일 확장명이 인터프리터(Ssinc.dll)로 매핑됩니다.

#echo 지시어를 사용하는 STM 페이지의 경우에는 단독으로 실행하거나 Response.Redirect로 ASP 페이지에서 호출하여 실행해야 합니다. Server.Transfer, Server.Execute 또는 #include를 사용하여 ASP 페이지에서 STM 페이지를 호출하면 STM 페이지를 ssinc.dll 대신 asp.dll로 보내므로 호출이 작동하지 않습니다.

IIS 스냅인을 설치한 경우 기본 확장명 매핑을 수정하고 새 매핑을 추가할 수 있습니다. 응용 프로그램 매핑 설정을 참조하십시오. 실행 가능한 여러 파일에 파일 확장명 하나를 매핑할 수 없으므로 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.All rights reserved.