我试图通过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正在运行。我不明白为什么我不在前台运行而且只在后台运行。
感谢。
答案 0 :(得分:0)
你是否在Windows上运行Jenkins slave agent作为无头服务?我记得在这种情况下GUI会有问题。添加从VM时,应该使用jnlp运行代理。这对我很有用。
答案 1 :(得分:0)
这是使用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批处理文件命令指定唯一的窗口标题。
答案 2 :(得分:0)
我想我迟到了,但我这样做了,而且奏效了:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd /K C:\Product\workspace\Product.exe -c -dir C:\ProductDir", 0, False Rem 0: run in background, False: exit without waiting process to stop, True to wait for process
Set objShell = Nothing
答案 3 :(得分:-1)
您可以使用.visible属性来显示正在运行的应用程序并将它们带到前台,例如objShell.Visible = True
下面我在启动应用程序时如何使用它的示例:
Dim objQtpApp
Set objQtpApp = CreateObject("QuickTest.Application")
'make QTP visible
objQtpApp.Visible = True