可执行文件在后台运行

问题描述 投票:0回答:3

我试图通过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正在运行。我不明白为什么我不在前台运行而且只在后台运行。

  1. 如何让exe在前台运行?
  2. 当我尝试直接在VM上运行时,我可以看到它在前台运行。无法理解这种情况。对此有何看法?

谢谢。

vbscript jenkins windows-server-2008-r2
3个回答
0
投票

您是否在Windows上运行Jenkins slave agent作为无头服务?我记得在这种情况下GUI会有问题。添加从VM时,应该使用jnlp运行代理。这对我来说很完美。


0
投票

这是使用VBScript对猫进行皮肤修饰的另一种方法。

我在尝试安排将Internet Explorer启动到前台的任务时遇到了同样的问题。我正在使用WScript的Run方法和3窗口选项来强制它最大化。我只是无法强迫它出现在前台。

我最终得到了使用WScript的AppActivate方法。诀窍是在循环中监视AppActivate的返回值,以确保应用程序在使用AppActivate将其带到前台之前使用正确的TITLE完全启动。

AppActivate Method

Here's my example script:

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批处理文件命令指定唯一的窗口标题。


-1
投票

您可以使用.visible属性来显示正在运行的应用程序并将它们带到前台,例如objShell.Visible = True

以下示例在启动应用程序时如何使用它:

Dim objQtpApp 

Set objQtpApp = CreateObject("QuickTest.Application")

'make QTP visible
objQtpApp.Visible = True
© www.soinside.com 2019 - 2024. All rights reserved.