ThinApp / App-V 任意のコマンドを実行する方法
仮想アプリの実行前等に任意のコマンドを
実行したいことが多々あるかと思います。
アプリ実行前にBatファイルを実行したり
VBScript を実行したいといったニーズがあります。
(仮想レジストリを変更したり、仮想ファイルシステムにあるファイルを変更したりと)
両製品ともに、柔軟にコマンドの実行ができるので、その方法を簡単に書きたいと思います。
事前準備:
予めCドライブの下にtestフォルダーを作成し仮想アプリから呼び出したい、
以下の2つのファイルを用意しておきます。

・end.vbs
start.batの内容
echo off echo "START BAT!" pause
end.vbsの内容
MsgBox "END VBS!"
仮想アプリ起動”前”にC:\test\start.batを実行します。
仮想アプリ終了”後”にC:\test\end.vbsを実行します。
【 ThinApp の場合の設定方法】
組込スクリプトを利用します。
プロジェクトフォルダに以下の VBScript ファイルを作成した後に、
Build.batを実行します。
sample.vbsの内容
Function OnFirstParentStart() Call WaitForProcess(ExecuteVirtualProcess("cmd.exe /c c:\test\start.bat"),0) End Function Function OnFirstParentExit() ExecuteVirtualProcess("wscript.exe c:\test\end.vbs") End Function
簡単な解説:
OnFirstParentStart は実行前にVOSから呼ばれる CallbackFunction です。
OnFirstParentExit は仮想アプリの終了後
ExecuteVirtualProcess は ThinApp 独自のAPIです。指定したパラメータを仮想環境で実行します。
物理環境で実行したい場合は、ExecuteExternalProcess を利用します。
WaitForProcess は起動したプログラムの終了を待ちます。
「0」はタイムアウトしないで、ずっと待つ意味
参考:
http://pubs.vmware.com/thinapp4/help/wwhelp/wwhimpl/js/html/wwhelp.htm?href=ThinApp_User_s_Guide.html
【 App-V の場合の設定方法】
OSDファイルを編集します。
青字部分を追加します。
<DEPENDENCY>
<CLIENTVERSION VERSION="4.6.0.0"/>
<SCRIPT EVENT="LAUNCH" PROTECT="TRUE" TIMING="PRE" WAIT="TRUE">
<HREF>cmd.exe /c c:\test\start.bat</HREF>
</SCRIPT>
<SCRIPT EVENT="SHUTDOWN" TIMING="POST">
<HREF>wscript.exe c:\test\end.vbs</HREF>
</SCRIPT>
</DEPENDENCY>
簡単な解説:
EVENT:ストリーム、起動、終了を指定できます。
PROTECT:仮想環境で実行する場合はTRUE、物理環境で実行する場合はFALSE
※コマンドの実行結果を仮想環境のみ反映させたい場合はTRUEにすることが多いです。
物理環境に反映させたい場合は、FALSEにします。
WAIT:コマンドの終了を待ってから仮想アプリケーションを動かす場合はTRUE
大文字小文字などに注意してください。
参考:
http://blogs.technet.com/b/appv/archive/2007/10/11/scripting-within-an-osd-file.aspx
実行結果:
App-V 4.6SP1で確認しています。
ThinApp 4.6.2で確認しています。
