Shell 函数
命名空间:Microsoft.VisualBasic
模块:Interaction
程序集:Microsoft Visual Basic .NET 运行库(位于 Microsoft.VisualBasic.dll 中)
ASP.NET环境下运行一个可执行程序,并且如果该程序仍然在运行,则返回一个包含该程序的进程 ID 的整数。
- Public Function Shell( _
- ByVal Pathname As String, _
- Optional ByVal Style As
- AppWinStyle = AppWinStyle.MinimizedFocus, _
- Optional ByVal Wait As Boolean = False, _
- Optional ByVal Timeout As Integer = -1 _
- ) As Integer
参数
Pathname
必选项。字符串。要执行的程序名以及任何需要的参数和命令行开关。Pathname 还可以包括驱动器和目录路径或文件夹。
Style
可选项。AppWinStyle。从 AppWinStyle 枚举中选择的值,该枚举与要在其中运行程序的窗口样式相对应。如果省略 Style,则Shell函数 使用 AppWinStyle.MinimizedFocus,这将使程序以最小化启动并具有焦点。
Style 参数可以有以下设置之一:
枚举值 说明
AppWinStyle.Hide 隐藏窗口并为隐藏的窗口提供焦点。
AppWinStyle.NormalFocus 为窗口提供焦点,并以最近的大小和位置显示窗口。
AppWinStyle.MinimizedFocus 为窗口提供焦点,并以图标的形式显示窗口。
AppWinStyle.MaximizedFocus 为窗口提供焦点,并以全屏方式显示窗口。
AppWinStyle.NormalNoFocus 将窗口设置为最近的大小和位置。当前活动窗口保持焦点。
AppWinStyle.MinimizedNoFocus 以图标的形式显示窗口。当前活动窗口保持焦点。
Wait
可选项。Boolean。指示 Shell 函数是否应等待程序完成的值。如果省略 Wait,则 Shell 使用 False。
Timeout
可选项。Integer。Wait 为 True 时等待完成的毫秒数。如果省略 Timeout,则 Shell 使用 -1,表示没有超时,Shell 直到程序完成时才返回。因此,如果省略 Timeout 或将它设置为 -1,则 Shell 函数可能永远不会将控制返回给程序。
现在看核心代码:
- dim but as string
- dim tempfile as
- string=server.MapPath(".") & "\" & "test.txt"
- shell("cmd.exe /c " & cmd.text & " > "
- & tempfile,,true,-1)
- dim myread as new streamreader
- (tempfile,encoding.default)
- but=myread.readtoend
- but=replace(but,"<","<")
- but=replace(but,">",">")
- result.text="
- " & but & "
- "
- myread.close
- if file.exists(tempfile) then
- file.delete(tempfile)
- end if
关键是shell函数("cmd.exe /c " & cmd.text & " > " & tempfile,,true,20000),这句话就是调用cmd.exe并且等待程序执行完毕。注意:要是你运行的命令需要等待(如date),那就惨了。那就暂时删不掉临时文件test.txt……而且不能再执行命令了……不知道高手能不能解决这个问题。
【编辑推荐】