可执行文件在后台运行

时间:2013-08-06 09:53:29

标签: vbscript jenkins windows-server-2008-r2

我试图通过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上运行时,我可以看到它在前台运行。无法理解这种情况。对此有何看法?
  3. 感谢。

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

AppActivate Method

这是我的示例脚本:

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