2013-08-06 18 views
0

我想通过Jenkins运行一个简单的批处理脚本(后者又调用VBscript)。我在我詹金斯执行脚本是:在后台运行的可执行文件

cd "C:\Product\workspace" 
cscript Test.vbs 

的test.vbs是简单的代码它调用在控制台模式

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一个exe:激活并显示一个窗口。如果窗口被最小化或最大化,则系统将其恢复到其原始大小和位置。

我面对的问题是我无法看到cmd.exe和Product.exe安装程序。虽然进程资源管理器显示cmd.exe和Product.exe正在运行。我不明白为什么我没有在前台运行,只在后台运行。

  1. 我怎样才能让exe在前台运行?
  2. 当我尝试直接在VM上运行时,我可以看到它在前台运行。不能理解这种情况。有关于此的任何信息?

谢谢。

+0

该命令在前台为我启动'CMD'窗口(虽然我没有在Jenkins中运行它)。也许你可以设置窗口标题'objShell.Run“cmd/k title xyz&Product.exe ...”,1',然后通过'objShell.AppActivate“xyz”'把它带到前台。 –

+0

@AnsgarWiechers:当我不使用詹金斯时,雅同样发生在我身上,它正常工作,但詹金斯出现问题。我也试过你的建议...没有帮助... – Kriti

+0

然后问题是与詹金斯。对不起,帮不了你。 –

回答

-1

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

Dim objQtpApp 

Set objQtpApp = CreateObject("QuickTest.Application") 

'make QTP visible 
objQtpApp.Visible = True 
+0

['WshShell'](http://msdn.microsoft.com/en-us/library/aew9yb99%28v=vs.84%29.aspx)对象没有'Visible'属性。 –

0

你运行詹金斯从代理作为Windows服务无头:下启动应用程序时我如何使用它的objShell.Visible =真

实例?我记得在这种情况下,GUI会有问题。您应该在添加从VM时使用jnlp运行代理。这对我来说很完美。

+0

代理仅与jnlp一起运行。 – Kriti

+0

我的经验是在GUI应用程序中使用WScript.Shell.Exec。看看这篇文章:http://www.codeproject.com/Tips/507798/Differences-between-Run-and-Exec-VBScript –

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

AppActivate适用于CMD/COMMAND窗口,如前所述,您可以使用TITLE批处理文件命令指定唯一的窗口标题。