1

我正在尝试通过 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 上运行时,我可以看到它在前台运行。无法理解这种情况。对此有任何启示吗?

谢谢。

4

4 回答 4

0

这是另一种使用 VBScript 给猫换皮的方法。

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

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

应用激活方法

这是我的示例脚本:

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”,但我能够使用我重定向到的网站的标题(“Google”在本例中可以正常工作)。因此,如果您不想提取您可能已经打开的应用程序的任何随机实例,请尽可能具体。CMD.EXETITLE 不是您最好的选择。

AppActivate特别适用于 CMD/COMMAND 窗口,正如(前面提到的)您可以使用 TITLE 批处理文件命令来指定唯一的窗口标题。

于 2014-03-14T16:36:17.303 回答
0

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

于 2013-08-07T03:13:39.390 回答
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
于 2021-05-18T07:05:38.130 回答
-1

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

下面是我在启动应用程序时如何使用它的示例:

Dim objQtpApp 

Set objQtpApp = CreateObject("QuickTest.Application")

'make QTP visible
objQtpApp.Visible = True
于 2013-08-06T10:56:55.477 回答