HTA에서 응용 프로그램을 시작하는 방법?
묻다:
안녕하세요, 스크립트 전문가! HTA의 경우 wscript.shell 명령을 대체 할 수있는 것이 있습니까? 응용 프로그램을 실행하고 열 킬 파일을 지정해야합니다.
-DL
답변:
안녕하세요 DL. 예, 우리는 이러한 명령이 HTA에서 사용될 수 있으며 WSCRIPT.SHELL 명령 대신 사용할 수 있음을 알고 있습니다. 한동안 소개하겠습니다. 그러나 소개하기 전에 실제로 HTA에서 wscript.shell 객체를 사용할 수 있습니다. 이것은 일반적인 혼란입니다. HTA에서 특정 명령을 사용할 수 없기 때문에 (예 : WSCRIPT.ECHO 및 WSCRIPT.SLEAP)는 HTA에서 WSH 명령을 사용할 수 없다고 생각합니다.
계속하기 전에 또 다른 질문이 있습니다. 왜 HTA에서 wscript.echo 및 wscript.sleep을 사용할 수 없습니까? 즉, 이러한 방법은 wscript 객체의 속성이며 WSCRIPT 객체의 인스턴스를 만들 수 없습니다. wscript 객체는 자동으로 생성되며 Windows 스크립트 호스트 (예 : wscript.exe 또는 cscript.exe)를 실행할 때만 생성됩니다. 다음 스크립트가 절대적으로 유효하다는 것은 정확히 다음과 같습니다.
코드는 다음과 같습니다.
wscript.echo "이봐."
WSCRIPT 호스트를 호출 할 때 자동으로 작성된 wscript 객체를 작성하지 않았습니다.
그러나 이것은 wscript 객체로 제한됩니다. 쉘 객체를 포함하여 생성 할 수있는 다른 WSH 객체가 있습니다. 예를 들어, 다음은 wscript.shell 객체를 생성 한 다음 Notepad.exe를 실행하는 간단한 작은 HTA입니다 (프로세스에서 파일 c : /scriptts/test.txt 파일) :
코드는 다음과 같습니다.
<html>
<헤드>
<script language = "vbscript">
하위 런 프로그램
set objshell = createobject ( "wscript.shell")
objshell.run "notepad.exe c : /scripts/test.txt"
종료 서브
</스크립트>
</head>
<body>
<버튼 onclick = "runprogram"> 실행 프로그램 </button> <p>
</body>
</html>
보시다시피, 이것은 거의 가장 쉬운 HTA입니다. 단 하나의 버튼으로 구성되며 클릭하면 RunProgram이라는 서브 루틴이 실행됩니다. RunProgram 코드를 살펴보십시오.
코드는 다음과 같습니다.
하위 런 프로그램
set objshell = createobject ( "wscript.shell")
objshell.run "notepad.exe c : /scripts/test.txt"
종료 서브
바로 그다지 : 우리는 wscript.shell 객체의 인스턴스를 생성하고 실행 메소드를 호출합니다. 실행에 대한 단일 매개 변수 : 실행 파일 이름 (notepad.exe)과 열려고하려는 파일의 경로가 전달됩니다. 그게 우리가해야 할 전부입니다.
그건 그렇고, 스크립트가 HTA에서 실행되는 한 아무런 문제가 없습니다. HTML 파일 (즉, 파일 확장자 .htm이있는 파일)으로 실행하려고하면 ActiveX 컨트롤이 페이지에서 실행되도록 경고하는 메시지 상자가 나타납니다. 서브 루틴이 쉘 객체를 생성 한 다음 실행하려면 예를 클릭해야합니다. WSH 객체는 "스크립팅에 대한 불안"으로 간주되기 때문입니다.
참고 : 예, 이것은 조금 이상하게 들립니다. 실제로 스크립팅 객체가 스크립팅에 안전하지 않다고 생각합니다. 그러나 인터넷 익스플로러는 WSH와 다른 스크립트 호스팅과 다른 보안 모델을 사용하기 때문입니다. 다행히도 HTA는 Internet Explorer와 다른 보안 모델을 사용하므로 HTA 내에서 쉘 객체를 만들 때이 문제가 발생하지 않습니다.