• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >vbs > VBS中Run和Exec的区别

VBS中Run和Exec的区别

作者:mdxy-dxy 字体:[增加 减小] 来源:互联网

mdxy-dxy 通过本文主要向大家介绍了vbs exec,vbs run,c temp run.vbs,vb和vbs的区别,run.exec等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Set ws = CreateObject("WScript.Shell")
'这里创建一个对象引用,以便在以下示例代码中使用。
'Demon注:这个变量名怎么这么猥琐(WS)
</div>

语法:(常识(Demon注:常识这个词我喜欢):作为过程使用时,不要加括号,否则出现编译器错误(参数唯一或没有时加括号不会出错,但建议不要加))

ws.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
[Set objExec =] ws.Exec(strCommand)
</div>

WScript.Shell对象的这两个方法:

都可以用来运行程序,且可以带参数。
都可以在程序路径中使用环境变量。
都不能为程序指定工作目录、不能设置优先级(start命令可以)。
要指定工作目录,只能通过改变脚本宿主(wscript.exe/cscript.exe)的当前工作目录:ws.CurrentDirectory = "工作目录"。(常识:工作目录有何意义:1、有些程序需要相应目录下的dll等相关文件支持 2、相对路径问题)

Run和Exec的区别:

1、Run可以直接运行文件(包括协议文件),会启动相关联的程序打开该文件(没有关联则出错)。start有此功能(更高级,没有关联时会打开“打开方式”对话框)。Exec只能运行程序。

ws.Run "c:\boot.ini"
ws.Exec "notepad c:\boot.ini"
</div>

2、Run不仅可以直接运行位于path环境变量目录中的程序,还能运行在注册表App Paths中设置的程序“别名”。start有此功能。Exec不行,只能直接运行位于path环境变量目录中的程序。

ws.Run "iexplore"
'iexplore 在 App Paths 中登记了别名。
ws.Exec "calc"
</div>

3、Run可以等待程序运行结束再执行下面的命令。start有此功能。Exec不行。

ws.Run "notepad", ,true
</div>

4、Exec运行的程序路径中即使含有空格,也可以不加引号(参数如需引号,它的引号不能省略)。Run、start没有这个本领。(常识:vbs中一个引号字符"本身要用两个引号表示,即写成""。也可以用Chr函数得到引号:chr(34))

ws.Exec "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
ws.Exec """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""
ws.Run  """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""
</div>

5、最大的区别是:Run着重于启动控制(设置窗口形式)。(start听名字知道是为了启动,也可以简单设置窗口最大化、最小化。)Exec着重于后续控制,并着重于控制命令行程序。

run可以设置程序运行时的运行模式(前台后台:是否隐藏窗口)、窗口大小、激活状态(是否获取“焦点”),具体参数请参考手册。
Exec在启动程序后还能对其进行控制:获取运行状态、获取PID、强行中止进程。如果运行的是命令行程序,还能提供对 StdIn/StdOut/StdErr 流的访问:写入执行命令、获取命令输出等。运行命令行程序后只能通过StdIn写入命令,控制台窗口不再接受用户输入。

ws.Run "notepad", 0
'隐藏窗口
ws.Run "notepad", 4
'运行后不激活,不打扰原来的活动窗口
</div>

注意,手册上明确指出,Run不能约束所有程序都按它指定的窗口形式运行,有些程序不听它的话,比如iexplore、calc等。运行ieplore时,它会夺取焦点成为活动窗口。Run无法以最小化运行calc。

Set oExec = ws.Exec("mspaint")
WScript.Echo oExec.ProcessId
oExec.Terminate
WScript.Echo oExec.Status '0为运行,1为结束
Set oExec = ws.Exec("ipconfig")
WScript.Echo oExec.StdOut.ReadAll
</div>

Exec的应用:

1、Runas自动输入密码:可能是设计时为安全考虑,runas不接收管道传递或从文件重定向得到,输入密码必须手动输入,这个问题困扰了不少人,却又难以解决,用Sendkeys也不一定稳妥(Demon注:我之前也说过很多次,用Sendkeys是不靠谱的,因为无法保证目标窗口一直获得焦点,但是经常见到很多人用,真是不明真相的群众,悲哀)。如果用Exec方法,就能轻松做到自动输入。

Set ws = CreateObject("WScript.Shell")
Set oExec = ws.Exec("cmd.exe")
oexec.StdIn.WriteLine "runas /user:username setup.bat"
oexec.StdIn.WriteLine "password"
</div>

2、Exec与Run的结合使用:Exec方法无法隐藏窗口,要得到命令行程序的输出,就会有一个黑呼呼的窗口一闪而过,不仅难看,还会让其他使用者误以为是木马什么的,很不完美。如何解决这个问题呢?就让Exec与Run合作吧!

Set ws = CreateObject("WScript.Shell")
host = WScript.FullName
'Demon注:这里不用这么复杂吧,LCase(Right(host, 11))不就行了
If LCase( right(host, len(host)-InStrRev(host,"\")) ) = "wscript.exe" Then
    ws.run "cscript """ & WScript.ScriptFullName & chr(34), 0
    WScript.Quit
End If
Set oexec = ws.Exec( "ipconfig")
Msgbox oExec.StdOut.ReadAll, , "ipconfig"
'此时不要用WScript.Echo,因为当前是在控制台运行
'WScript.Echo的结果会在控制台输出,不会弹出对话框。
</div>

vbsRun方法

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

【参数】
object
WshShell 对象。
strCommand
表示要运行的命令行的字符串值。包括要传递到可执行文件的所有参数。
intWindowStyle
可选。表示程序窗口外观的整数值。
请注意,并非所有程序都使用此信息。
bWaitOnReturn
可选。布尔值,表示在继续执行脚本中的下一条语句之前,脚本是否等待执行完程序。
如果设为 true,则在执行完程序后才执行脚本,Run 方法返回由程序返回的任何错误代码。
如果设为 false(默认值),则 Run 方法将自动在启动程序后立即返回 0(不是错误代码)。
 
【说明】
Run 方法返回一个整数。Run 方法启动在新 Windows 进程中运行的程序。
可以让脚本等到程序执行完后再继续执行。这允许您同步运行脚本和程序。
strCommand 参数内的环境变量自动扩展。
如果某个文件类型已正确注册到某个程序中,则对该类型的文件调用 Run 方法时将执行该程序。例如,如果您的计算机系统中装有 Word,则对 *.doc 文件调用 Run 方法时将启动 Word 并加载该文档。
【intWindowStyle 说明 】
0 隐藏一个窗口并激活另一个窗口。
1 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置。第一次显示该窗口时,应用程序应指定此标志。
2 激活窗口并将其显示为最小化窗口。
3 激活窗口并将其显示为最大化窗口。
4 按最近的窗口大小和位置显示窗口。活动窗口保持活动状态。
5 激活窗口并按当前的大小和位置显示它。
6 最小化指定的窗口

您可能想查找下面的文章:

  • VBS中Run和Exec的区别
  • VBS教程:方法-Execute 方法

相关文章

  • 用vbs检查注册表项的访问权限的代码
  • vbs列出内网的中计算机(工作组也可以)
  • 一段提取用户名和md5的vbs代码
  • 用vbs实现虚拟主机和域名查循的脚本
  • VBS教程:VBScript 语句-Public 语句
  • VBS基础编程教程 (第4篇)
  • 用vbs实现注册表开关的脚本
  • VBS教程:方法-AddFolders 方法(Folders)
  • VBS教程:运算符-除运算符 (/)
  • 可以查询系统用户名sid的vbs

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 校准系统时间的VBS代码
    • VBS教程:方法-Exists 方法
    • vbs 解析html文档的方法(htmlfile)
    • vbs解决处理TXT文本数据相关问题实现代码
    • VBS教程:正则表达式简介 -普通字符
    • mdir.vbs 建立隐藏虚拟目录的vbs
    • 用vbs删除前一天创建的备份文件
    • VBS的字符串及日期操作相关函数
    • 用vbs实现解除注册表CMD、Regedit、Taskmgr限制的脚本代码
    • VBS中获取系统本次及上次开关机时间的代码(WinXP/win2003/Win7兼容版)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有