(App-V).Net Frameworkをミドルウェアとしてパッケージする
.Net Framework1.1上で動いている業務アプリケーションがあります。


今回、WindowsServer 2008 R2 のRDS(リモートデスクトップサービス、旧ターミナルサービス)に移行する予定なんですが、WindowsServer2008 R2 や Windows7 では .Net Framework1.0/1.1は利用できなくなりました。

(この件に関しては、詳細は下記を参照。)
.NET Frameworkのバージョンを整理する - @IT
.NET Framework 1.0/1.1 上で稼働するアプリケーションをお使いのお客様へ - .NET Framework 移行センター

こういう場合に App-V を使えば.NetFrameworkごと仮想化してしまえるので、サポートされなくなった.Net Framework1.0/1.1を使うアプリケーションも使うことができます。
(.NetFramework2.0~3.5であれば WindowsServer2008 R2 には標準で入っているので何もしなくても動きます)

シーケンサーでパッケージを作るときに、標準アプリケーションと同じ方法で、.Net Framework1.0/1.1インストール→業務アプリケーション インストールという方法でやったら普通にきました。
しかし、別の.Net Framework1.0/1.1 を使うアプリケーションを同じ方法でパッケージ化し、App-Vサーバでインポートしようとすると、下記イメージのように、「アプリケーションは作成できません。指定の名前およびバージョンは既に使用されています。」とエラーになります。
e0091163_235069.jpg


名前を変えればいいのでしょうが、業務アプリケーションのパッケージごとに .Net Framework があるのはキャッシュの点から考えても効率的とは言えません。
ということで、ミドルウェア化を試してみました。構成としては下記のようになります。
e0091163_23502275.jpg


このミドルウェア化したアプリケーションを、他のアプリケーションパッケージから使う方法からは、App-V の Dynamic Suite Composition という機能で動いているようですね。


手順は、MS Technet:Dynamic Suite Composition を使用する方法が参考になりますが、概略を下記に書いておきます。
App-V は 4.6 です。


1.まずシーケンスを行うPCのに、ミドルウェア(今回だと.NetFramework1.0/1.1)をインストールします。
(この際、シーケンスの作業はしません。普通にインストールするだけです。)

2.そして、ミドルウェアを利用する業務アプリケーションを、シーケンスします。
できたパッケージをApp-Vサーバのコンテンツフォルダに保存し、インポートします。

3.シーケンスするPCを 1. を行う前の状態にもどして、今度はミドルウェアをシーケンスします。(アプリケーションの種類はミドルウェア)
できたパッケージをApp-Vサーバのコンテンツフォルダに保存し、インポートします。
e0091163_2352463.jpg



4.ここから、業務アプリケーションとミドルウェアのパッケージの依存関係設定を行います。
ミドルウェアパッケージ内の osd ファイルをテキストエディタで開きます。(どのファイルでもいいようです。)

5.開いたファイルの CODEBASE HREF 行をコピーします。
(今回だと下記のような行になりました)

<CODEBASE HREF="RTSP://appv-sv:554/dotnet_fr1011_mid/dotnet_fr1011_mid_2.sft" GUID="5AB8B691-3395-4B56-A896-6C87BA7B0FF4" PARAMETERS="" FILENAME="%CSIDL_WINDOWS%\Microsoft.NET\Framework\v1.0.3705\ConfigWizards.exe" SYSGUARDFILE="dotnet_fr1011_mid\osguard.cp" SIZE="169636875"/>


6.業務アプリケーションのosdファイルを開きます。
<DEPENDENCIES> タグを、<VIRTUALENV> セクションの最後にある </ENVLIST> タグの後、</VIRTUALENV> タグの直前に挿入し、コピーしているミドルウェアの CODEBASE HREF 行を <DEPENDENCIES> タグ内に貼り付けます。
また、ミドルウェアパッケージで、OSDファイルの <ENVLIST> セクションに任意のエントリがある場合、これらのエントリを業務アプリケーションOSDファイルの同じセクションにコピーする必要があるようです。(今回はこれは必要有りませんでした。)

注意点として、ミドルウェアが必須パッケージの場合、MANDATORY="TRUE" CODEBASE タグ内に追加しないといけません。たいてい必須になるかと思います。
最初これを忘れていて、うまく業務アプリケーションが動きませんでした。

業務アプリケーション側のOSDファイルですが、赤色の部分が変更点です。

<?xml version="1.0" standalone="no"?>
<SOFTPKG GUID="xxxx" NAME="HogeApri" VERSION="1.0.0.0">
<IMPLEMENTATION>
<CODEBASE HREF="RTSP://appv-sv:554/hogeapri/hogeapri_2.sft" GUID="xxxx" PARAMETERS="" FILENAME="hogeapri\hoge\hoge.exe" SYSGUARDFILE="hogeapri\hoge.cp" SIZE="133042724"/>
<VIRTUALENV TERMINATECHILDREN="FALSE">
<POLICIES>
<LOCAL_INTERACTION_ALLOWED>FALSE</LOCAL_INTERACTION_ALLOWED>
</POLICIES>
<ENVLIST/>


<DEPENDENCIES>
<CODEBASE HREF="RTSP://appv-sv:554/dotnet_fr1011_mid/dotnet_fr1011_mid_2.sft"
MANDATORY="TRUE" GUID="5AB8B691-3395-4B56-A896-6C87BA7B0FF4" PARAMETERS="" FILENAME="%CSIDL_WINDOWS%\Microsoft.NET\Framework\v1.1.4322\ConfigWizards.exe" SYSGUARDFILE="dotnet_fr1011_mid\osguard.cp" SIZE="169636875"/>
</DEPENDENCIES>


</VIRTUALENV>
<WORKINGDIR/>
<VM VALUE="Win32">
<SUBSYSTEM VALUE="windows"/>
</VM>
</IMPLEMENTATION>
...省略


おそらくこのミドルウェアでパッケージする方法は、Javaランタイムとかにも使えると思います。

追記:
さっき気づいたんですが、パッケージ間の依存関係を上記手順では直接OSDファイルを書き換える方法でやっていました。
しかし、Application Virtualization Dynamic Suite Composition Tool というものを使えば、GUIで簡単にできるということが、山市良のえぬなんとかわーるど: App-V にあっぷっぷ: Dynamic Suite Composition に書かれてました。


参考:
MS TechNet:新しいミドルウェア アプリケーションをシーケンス処理する方法
[PR]
by Jehoshaphat | 2011-12-18 23:52 | サーバがらみ | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/17084793
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (App-V)アプリケーション... VisualStudio無いけ... >>