1

Jenkins を介して単純なバッチ スクリプトを実行しようとしています (VBscript を呼び出します)。私がジェンキンスで実行しているスクリプトは次のとおりです。

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 をフォアグラウンドで起動するタスクをスケジュールしようとすると、同じ問題が発生しました。ウィンドウ オプションを指定して WScript のRunメソッドを使用し、3ウィンドウを強制的に最大化していました。強制的に前面に出すことができませんでした。

私はついにそれをWScriptのAppActivateメソッドで動作させることができました。トリックは、アプリケーションをフォアグラウンドに移動するAppActivate前に、アプリケーションが正しい TITLE で完全に起動されていることを確認するために、ループ内で の戻り値を監視することでした。AppActivate

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は、アプリケーションのタイトル (または単純ではないプロセス ID) に最も近いものを選択します。完全なタイトルを持っている必要はありません。ここでは「Internet Explorer」を示していますが、リダイレクト先の Web サイトの TITLE を使用できました (この例では「Google」で問題ありません)。そのため、既に開いている可能性のあるアプリケーションのランダムなインスタンスを取得したくない場合は、できるだけ具体的にしてください。CMD.EXETITLE は最善の策ではありません。

AppActivate(前述のように) TITLE バッチ ファイル コマンドを使用して一意のウィンドウ タイトルを指定できるため、CMD/COMMAND ウィンドウで特にうまく機能します。

于 2014-03-14T16:36:17.303 に答える