我试图通过Jenkins(后者调用VBscript)运行一个简单的批处理脚本。我在Jenkins中执行的脚本是:
cd "C:\Product\workspace"
cscript Test.vbs
test.vbs是一个简单的代码,它在控制台模式下调用exe
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd /K C:\Product\workspace\Product.exe -c -dir C:\ProductDir", 1
Set objShell = Nothing
参数1:激活并显示一个窗口。如果窗口最小化或最大化,系统会将其恢复到原始大小和位置。
我面临的问题是我无法看到cmd.exe和Product.exe安装程序。虽然进程资源管理器显示cmd.exe和Product.exe正在运行。我不明白为什么我不在前台运行而且只在后台运行。
谢谢。
您是否在Windows上运行Jenkins slave agent作为无头服务?我记得在这种情况下GUI会有问题。添加从VM时,应该使用jnlp运行代理。这对我来说很完美。
这是使用VBScript对猫进行皮肤修饰的另一种方法。
我在尝试安排将Internet Explorer启动到前台的任务时遇到了同样的问题。我正在使用WScript的Run
方法和3
窗口选项来强制它最大化。我只是无法强迫它出现在前台。
我最终得到了使用WScript的AppActivate
方法。诀窍是在循环中监视AppActivate
的返回值,以确保应用程序在使用AppActivate
将其带到前台之前使用正确的TITLE完全启动。
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "iexplore.exe https://www.google.com", 3, false
WScript.Sleep 2000
While WshShell.AppActivate("Internet Explorer") = FALSE
WScript.Sleep 1000
Wend
WshShell.AppActivate "Internet Explorer"
WScript.Quit
=========================
注意:AppActivate
将为应用程序选择最接近的匹配项TITLE(或进程ID,这不是那么简单)。您不必拥有完整的TITLE。我在这里显示“Internet Explorer”,但我能够使用我重定向到的网站的TITLE(“Google”在此示例中可以正常工作)。因此,如果您不想提取任何已经打开的应用程序的随机实例,请尽可能具体。一个CMD.EXE
TITLE不是你最好的选择。
AppActivate
特别适用于CMD / COMMAND窗口,如前所述,您可以使用TITLE批处理文件命令指定唯一的窗口标题。
您可以使用.visible属性来显示正在运行的应用程序并将它们带到前台,例如objShell.Visible = True
以下示例在启动应用程序时如何使用它:
Dim objQtpApp
Set objQtpApp = CreateObject("QuickTest.Application")
'make QTP visible
objQtpApp.Visible = True