2013-08-06 6 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 : 젠킨스를 사용하지 않을 때도 마찬가지입니다. 제대로 작동하지만 젠킨스와 함께 문제가 나타납니다. 또한 나는 ur 제안을 시도했다. .. 도움이되지 않는다. .. – Kriti

+0

그 다음 문제는 Jenkins와있다. 죄송합니다, 거기서 도울 수 없습니다. –

답변

-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) 개체에 '표시'가 없습니다. 재산. –

0

당신이 창에 헤드리스 (headless) 서비스로 젠킨스 슬레이브 에이전트를 실행하고 있습니까 : 응용 프로그램을 시작할 때 내가 그것을 사용하는 방법의 아래 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) 응용 프로그램에 가장 근접한 것을 선택합니다. 완전한 제목을 가질 필요는 없습니다. 여기에 "Internet Explorer"가 표시되지만 리디렉션 할 웹 사이트의 제목을 사용할 수있었습니다 (이 예에서는 'Google'이 정상적으로 작동합니다).따라서 이미 열려있는 응용 프로그램의 임의의 인스턴스를 끌어 오지 않으려는 경우 가능한 구체적으로하십시오. CMD.EXE TITLE은 최선의 방법이 아닙니다.

AppActivate은 (전술 한 바와 같이) TITLE 배치 파일 명령을 사용하여 고유 한 창 제목을 지정할 수 있으므로 CMD/COMMAND 창에서 특히 잘 작동합니다.