"closed at: " & myProcess.ExitTime & "." & _
System.Environment.NewLine & "Exit Code: " & _
myProcess.ExitCode)
myProcess.Close()
前面的代码返回一个零(0)值的ExitCode。如果想看看非零值ExitCode的例子,可以在系统目录上附加一个"X"或其他字符,这样能使它非法。这导致出现一个错误,ExitCode值将不同。因为一个带有错误的过程可能会一直运行下去,代码在返回到控制启动的程序之前,使用一个超载WaitForExit方法来等待几毫秒时间。上面的代码等待一秒钟,然后调用Kill方法结束启动的过程,强迫过程退出。请查看一下你的应用程序启动目录中的dirOutput.txt是否存在。
15d
探测一个过程什么时候退出
在VB6中,你可以调用Win32 API的GetModuleUsage()函数来判定过程什么时候结束。在.NET中,相应的操作是在启动过程后不断的循环,检查Process.HasExited属性,并且调用Application.DoEvents方法处理你的应用程序中其他的事件,直到过程结束。
Do While Not myProcess.HasExited
Application.DoEvents
Loop
但是Process类给了你一个更简洁的方法来判断过程什么时候退出--它可以产生一个Exited事件。为了使这种情况出现,你需要设置Process.EnableRaisingEvents属性为True(默认情况下属性值为False),并创建一个事件句柄。例如:
'允许过程产生事件
myProcess.EnableRaisingEvents = True
'添加一个Exited事件句柄
AddHandler myProcess.Exited, _
AddressOf Me.ProcessExited
'开始过程
myProcess.Start()
'事件处理程序
Friend Sub ProcessExited(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim myProcess As Process = DirectCast( _
sender, Process)
MessageBox.Show("The process exited, raising " & _
"the Exited event at: " & myProcess.ExitTime & _
"." & System.Environment.NewLine & _
"Exit Code: " & myProcess.ExitCode)
myProcess.Close()
End Sub
使用这两种方法潜在的问题就是如果启动的过程挂起或者从不退出,你的应用程序就会一直停止。解决办法就是添加一个定时器,周期性的检查启动的程序是否有响应。
控制过程输入输出
有时候,你可能不仅仅想使用简单的命令行,而是想把更复杂的输入信息直接发送到启动的过程中。前面例子中的把输出导入到文件中的方法,并不总是最好的选择。在许多情况下,把输出直接导回你的应用程序可能更有效。对于使用StdIn、StdOut和StdErr的程序,比如控制台应用程序,你可以覆盖默认方法,提供一个StreamWriter来输入,并提供一个StreamReaders来读取StdOut和StdErr输出值。当你启动过程的时候,你需要设置ProcessStartInfo对象的RedirectStandardInput、RedirectStandardOutput和RedirectStandardError属性为True。然后,在启动过程之后,使用Process对象的StandardInput、StandardOutput和StandardError属性来把输入输出流分配到StreamReader和StreamWriter对象。
警告:默认情况下,框架使用Win32 ShellExecute函数,在内部启动过程;但是当你想再分配输入输出流的时候,你必须在启动过程之前设置ProcessStartInfo.UseShellExecute属性为False。注意当你那么做的时候,你必须要么指定到文件的完全路径,要么文件位置必须在环境路径中。例如,下面的代码创建一个不可见的窗口,取得系统目录中.com文件的目录列表,然后在一个消息框中显示结果。
Dim myProcess As Process = New Process()
Dim s As String
myProcess.StartInfo.FileName = "cmd.exe"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.CreateNoWindow = True
myProcess.StartInfo.RedirectStandardInput = True
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.StartInfo.RedirectStandardError = True
myProcess.Start()
Dim sIn As StreamWriter = myProcess.StandardInput
sIn.AutoFlush = True
Dim sOut As StreamReader = myProcess.StandardOutput
Dim sErr As StreamReader = myProcess.StandardError
sIn.Write("dir c:\windows\system32\*.com" & _
System.Environment.NewLine)
sIn.Write("exit" & System.Environment.NewLine)
s = sOut.ReadToEnd()
If Not myProcess.HasExited Then
myProcess.Kill()
End If
MessageBox.Show("The 'dir' command window was " & _
closed at: " & myProcess.ExitTime & "." & _
System.Environment.NewLine & "Exit Code: " & _
myProcess.ExitCode)
sIn.Close()
sOut.Close()
sErr.Close()
myProcess.Close()
MessageBox.Show(s)
对于不使用StdIn的程序,你可以使用SendKeys方法来输入按键事件。例如,下面这些代码启动记事本并输入一些文本。
Dim myProcess As Process = New Process()
myProcess.StartInfo.FileName = "notepad"
myProcess.StartInfo.WindowStyle = _
ProcessWindowStyle.Normal
myProcess.EnableRaisingEvents = True
AddHandler myProcess.Exited, _
AddressOf Me.SendKeysTestExited
myProcess.Start()
myProcess.WaitForInputIdle(1000)
If myProcess.Responding Then
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关文章
热点关注
- 在asp.net中为Web用户控件
- .NET3.5和VS2008中的ASP.N
- 对.NET Framework 反射的
- Asp.net Ajax 1.0 异步回
- ASP.NET2.0的控件状态和视
- 通过避免下列10个常见ASP.
- 中国地区三级联动下拉菜单
- 解析Asp.net中资源本地化
- 一个无刷新效果定时自动更
- 动态创建MSSQL数据库表存
- asp.net用url重写URLReWri
- 使用ASP.NET Atlas编写显
- 关于ASP.NET调用JavaScrip
- 使用ASP.Net Forms模式实
- asp.net ajax 使用updatep
- 优化ASP.NET应用程序性能
- ASP.NET中动态修改web.con
- ASP.NET中利用Crystal Rep
- asp.net如何生成图片验证
- 基于ASP.NET的Web动态控件
- 分享个极好的无刷新二级联
- asp.net 2.0 上传控件的使
- 创建ASP.NET监视服务器进
- Asp.net把UTF-8编码转换为
- 开发基于ASP.NET WebServi
- asp.net结合html,javascr
- asp.net 2.0下嵌套masterp
- 正则表达式提取数字
- 最新版FreeTextBox(版本3.
- 获取本机上配置好的Oracle
- ASP.Net全局变量的设置和
- VB几个有用的函数
- 用代码画折线图/柱形图/
- FCKeditor2.2 ASP.NET2.0
- 客户端回调实现gridView无
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD




