千家信息网

如何使用VB.NET的shell程序

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍如何使用VB.NET的shell程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VB.NET经过长时间的发展,很多用户都很了解VB.NET了,这里我发表一下个
千家信息网最后更新 2026年11月01日如何使用VB.NET的shell程序

这篇文章主要介绍如何使用VB.NET的shell程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

VB.NET经过长时间的发展,很多用户都很了解VB.NET了,这里我发表一下个人理解,和大家讨论讨论。在Windows环境下的所谓shell程序就是dos命令行程序,比如VC的CL.exe命令行编译器,JDK的javac编译器,启动java程序用的java.exe都是标准的shell程序。截获一个shell程序的输出是很有用的,比如说您可以自己编写一个IDE(集成开发环境),当用户发出编译指令时候,你可以在后台启动shell调用编译器并截获它们的输出,对这些输出信息进行分析后在更为友好的用户界面上显示出来。为了方便起见,我们用VB作为本文的演示语言。

通常,系统启动Shell程序时缺省给定了3个I/O信道,标准输入(stdin),标准输出stdout,标准错误输出stderr。之所以这么区分是因为在早期的计算机系统如PDP-11的一些限制。那时没有GUI,将输出分为stdout,stderr可以避免程序的调试信息和正常输出的信息混杂在一起。通常,shell程序把它们的输出写入标准输出管道(stdout)、把出错信息写入标准错误管道(stderr)。缺省情况下,系统将管道的输出直接送到屏幕,这样一来我们就能看到应用程序运行结果了。为了捕获一个标准控制台应用程序的输出,我们必须把standOutput和standError管道输出重定向到我们自定义的管道。

下面的代码可以启动一个VB.NET shell程序,并将其输出截获。执行并返回一个命令行程序(shell程序)的标准输出和标准错误输出'通常命令行程序的所有输出都直接送到屏幕上

PrivateFunctionExecuteApp(sCmdlineAsString)  AsStringDimprocAsPROCESS_INFORMATION,  retAsLongDimstartAsSTARTUPINFO  DimsaAsSECURITY_ATTRIBUTESDimhReadPipeAsLong'负责读取的管道  DimhWritePipeAsLong'负责Shell程序的标准输出和标准错误输出的管道  DimsOutputAsString'放返回的数据  DimlngBytesReadAsLong,  sBufferAsString*256sa.nLength=Len(sa)  sa.bInheritHandle=Trueret=CreatePipe(hReadPipe,  hWritePipe,sa,0)Ifret=0ThenMsgBox "CreatePipefailed.Error:"&Err.LastDllErrorExitFunction  EndIfstart.cb=Len(start)  start.dwFlags=STARTF_USESTDHANDLESOrSTARTF_USESHOWWINDOW'把标准输出和标准错误输出重定向到同一个管道中去。  start.hStdOutput=hWritePipestart.hStdError=hWritePipestart.wShowWindow=SW_HIDE'隐含shell程序窗口'启动shell程序,sCmdLine指明执行的路径  ret=CreateProcessA(0&,sCmdline,sa,sa,  True,NORMAL_PRIORITY_CLASS,_0&,0&,start,proc)  Ifret=0ThenMsgBox"无法建立新进程,错误码:  "&Err.LastDllErrorExitFunctionEndIf'本例中不必向shell程序送信息,因此可以先关闭  hWritePipeCloseHandlehWritePipe'循环读取shell程序的输出,每次读取256个字节。  Doret=ReadFile(hReadPipe,sBuffer,256,lngBytesRead,0&)  sOutputsOutput=sOutput&Left$(sBuffer,lngBytesRead)LoopWhileret<>0'如果ret=0代表没有更多的信息需要读取了'释放相关资源  CloseHandleproc.hProcessCloseHandleproc.hThreadCloseHandlehReadPipeExecuteApp=sOutput'输出结果EndFunction

我对这个程序进行一些解释。

ret=CreatePipe(hReadPipe,hWritePipe,sa,0)

再把VB.NET shell程序的标准输出和标准错误输出都定向到我们预先建好的管道中。
代码如下:

start.dwFlags=STARTF_USESTDHANDLESOrSTARTF_USESHOWWINDOW start.hStdOutput=hWritePipe start.hStdError=hWritePipe

好,现在可以调用建立新进程的函数了:

ret=CreateProcessA(0&,sCmdline,sa,sa,True,NORMAL_PRIORITY_CLASS,0&,0&,start,proc)


然后,循环读管道里的数据直到无数据可读为止。

Do  ret=ReadFile(hReadPipe,sBuffer,256,lngBytesRead,0&)'每次读256字节  sOutputsOutput=sOutput&Left$(sBuffer,lngBytesRead)'送入一个字符串中  LoopWhileret<>0'若ret=0表明没有数据等待读取。

然后,释放不用的资源。

VB.NET shell程序用法很简单:比如:

MsgBoxExecuteApp("c:\windows\command\mem.exe)

以上是"如何使用VB.NET的shell程序"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

程序 输出 标准 管道 错误 信息 命令 数据 编译 用户 系统 编译器 代码 内容 字节 屏幕 应用程序 更多 环境 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网科技集团 智能科技公司是互联网公司吗 互联网科技金融公司 平安科技 互联网 互联网科技ppt模板 北京禾田雨橡互联网科技 友谊互联网络科技 伴你行互联网科技有限公司 重庆科技学院互联网 新华互联网科技校企合作 团飞科技与伯堂互联网服务平台 互联网和黑科技的看法 如何创新互联网科技 科技互联网的核心竞争力 上海科技产业互联网平台 广州千川互联网科技有限公司 工业互联网科技成果转化 卡尔迅互联网科技有限公司 美国五大互联网科技公司市值多少 现代互联网科技公司 互联网科技园 江苏根荣互联网科技 互联网络科技有限公司 易互联网科技有限公司 深圳国际航运科技和互联网 受益于互联网科技的高速发展 互联网软件和科技 成都互联网科技公司工作好不好 广州新华互联网科技学校电竞方面 互联网科技的前景
0