.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サーバでインポートしようとすると、下記イメージのように、「アプリケーションは作成できません。指定の名前およびバージョンは既に使用されています。」とエラーになります。
名前を変えればいいのでしょうが、業務アプリケーションのパッケージごとに .Net Framework があるのはキャッシュの点から考えても効率的とは言えません。
ということで、ミドルウェア化を試してみました。構成としては下記のようになります。
このミドルウェア化したアプリケーションを、他のアプリケーションパッケージから使う方法からは、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サーバのコンテンツフォルダに保存し、インポートします。
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:新しいミドルウェア アプリケーションをシーケンス処理する方法