An Exec component for ASP Version 3.0 Sept 20, 1998
Copyright (c) 1997, 1998 by ServerObjects Inc.
All rights reserved.
http://www.serverobjects.com

Notes for version 1.0 & 2.0 users:
Please unregister the old version before installing this new version. You can do this by typing regsvr32 /u aspexec.dll Also note that the object is now called AspExec.Execute instead of ASPsvg.Execute so your Server.CreateObject calls will need to be changed to reflect this new name.

Description:
ASPExec allows you to execute DOS and Windows apps. The following functionality is available through ASPExec property

Installation:
To use this ASP component move the DLL into a subdirectory (like \winnt\system32 for NT or \windows\system for Win95) and type regsvr32 aspexec.dll You MUST go into control panel/services/world wide web publishing service and turn Allow Service to Interact with Desktop on to use this component if you run IIS as a service. Some users after upgrading to SP3 report that visual apps no longer pop up. Make sure that you have any Inetinfo managed services marked as "Allow to Interact with Desktop" if you want to see visible apps on the server screen. Otherwise they will appear as hidden windows.

Usage:
See the following example ASP scripts for usage

ASPCOPY.ASP

<html>
<head><title>ASPExec Test (copy)</title><head>
<body>
<H3>ASPExec Copy Test</H3>

<%
  Set Executor = Server.CreateObject("ASPExec.Execute")
  Executor.Application = "cmd /c copy c:\*.* g:\temp"
  Executor.Parameters = ""
  strResult = Executor.ExecuteDosApp
  Response.Write "<pre>" & strResult & "</pre>"
%>

</body>
</html>

ASPDIR.ASP

<html>
<head><title>ASPExec Dir Test (ping)</title><head>
<body>
<blockquote>
<H3>ASPExec Dir Test</H3>
<%

  function Subst (strValue, strOldValue, strNewValue)
    intLoc = InStr(strValue, strOldValue)
    While intLoc > 0
      if intLoc > 1 then
        if intLoc = Len(strValue) then
          strValue = Left(strValue, intLoc-1) & strNewValue
        else
          strValue = Left(strValue, intLoc -1) & strNewValue & Right(strValue, Len(strValue)-(intLoc-Len(strOldValue)+1))
        end if
      else
        strValue = strNewValue & Right(strValue, Len(strValue)-1)
      end if
      intLoc = InStr(strValue, strOldValue)
    Wend
    Subst = strValue
  end function

  function FixUpItems (strItem)
    if strItem <> "" then
      strItem = Subst(strItem, "<", "&lt;")
      strItem = Subst(strItem, ">", "&gt;")
      FixUpItems = strItem
    else
      FixUpItems = "<br>"
    end if
  end function

  Set Executor = Server.CreateObject("ASPExec.Execute")
  Executor.Application = "cmd"
  Executor.Parameters = "/C dir c:\"
  strResult = FixUpItems(Executor.ExecuteDosApp)
  Response.Write "<pre>" & strResult & "</pre>"
%>
</blockquote>
</body>
</html>

ASPEXEC.ASP

<html>
<head><title>ASPExec Test (ExecuteWinApp)</title><head>
<body bgcolor=white text=black>
<blockquote>
<H3>ASPExec ExecuteWinApp Test</H3>
<%
  Set Executor = Server.CreateObject("ASPExec.Execute")
  Executor.Application = "notepad.exe"
  Executor.Parameters = "c:\autoexec.bat"
  Executor.ShowWindow = True
  Response.Write "Attempting to execute " & Executor.Application & "<br>"
  strResult = Executor.ExecuteWinApp
  Response.Write "The result of this call was: " & strResult
%>
<p>If you do not see Notepad then it is possible that Notepad is running with a hidden window.
This could be caused by not having "Allow Service to Interact with Desktop" turned off in 
Control Panel/Services/World Wide Web Publishing Service or it could be that the version 
of IIS you are running is preventing the window from being displayed. Look in a task list
such as task manager, or use TList from the NT resource kit to see if Notepad is running.
<B>Note: All InetInfo managed services must have "Allow Service to Interact with Desktop"
turned on to see visible apps.</b>
</blockquote>
</body>
</html>

ASPEXECW.ASP

<html>
<head><title>ASPExec Test (ExecuteWinAppAndWait)</title><head>
<body bgcolor=white text=black>
<H3>ASPExec ExecuteWinAppAndWait Test</H3>
<%
  Set Executor = Server.CreateObject("ASPExec.Execute")

  rem ***********************************************
  rem * I'm not feeling very original tonight so
  rem * let's just execute notepad and then close it
  rem * out to verify the Wait portion works...
  rem ***********************************************

  Executor.Application = "notepad.exe"
  Executor.Parameters = "c:\autoexec.bat"
  Executor.TimeOut = 9000
  Response.Write "Attempting to execute " & Executor.Application & "<br>"

  rem results of this method are the results of GetLastError
  intResult = Executor.ExecuteWinAppAndWait
  if intResult = 0 then
    Response.Write "Execution successful"
  else
    Response.Write "The result of this call was: " & intResult
  end if
%>

</body>
</html>

ASPPING.ASP

<html>
<head><title>ASPExec Test (ping)</title><head>
<body>
<H3>ASPExec Ping Test</H3>

<% if Request.QueryString("host") = "" then %>
<form action="/scripts/aspping.asp" method=get>
Enter Host to Ping: <input type=text size=45 name=host value="localhost">&nbsp;&nbsp;&nbsp;
<input type="Submit">
</form>

<% else
     Set Executor = Server.CreateObject("ASPExec.Execute")
     Executor.Application = "ping"
     Executor.Parameters = Request.QueryString("host")
     strResult = Executor.ExecuteDosApp
     Response.Write "<pre>" & strResult & "</pre>"
  end if
%>

</body>
</html>

ASPTRACE.EXE

<html>
<head><title>ASPExec Test (tracert)</title><head>
<body>
<H3>ASPExec TraceRt Test</H3>
<% if Request.QueryString("host") = "" then %>
<form action="/scripts/asptrace.asp" method=get>
Enter Host to Ping: <input type=text size=45 name=host value="www.microsoft.com">&nbsp;&nbsp;&nbsp;
<input type="Submit">
</form>

<%
  else
    Set Executor = Server.CreateObject("ASPExec.Execute")
    Executor.Application = "tracert"
    Executor.Parameters = Request.QueryString("host")
    strResult = Executor.ExecuteDosApp
    Response.Write "<pre>" & strResult & "</pre>"
  end if
%>

</body>
</html>

Interested: