3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(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サーバでインポートしようとすると、下記イメージのように、「アプリケーションは作成できません。指定の名前およびバージョンは既に使用されています。」とエラーになります。

名前を変えればいいのでしょうが、業務アプリケーションのパッケージごとに .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 行をコピーします。

(今回だと下記のような行になりました)

6.業務アプリケーションのosdファイルを開きます。

タグを、 セクションの最後にある タグの後、 タグの直前に挿入し、コピーしているミドルウェアの CODEBASE HREF 行を タグ内に貼り付けます。

また、ミドルウェアパッケージで、OSDファイルの セクションに任意のエントリがある場合、これらのエントリを業務アプリケーションOSDファイルの同じセクションにコピーする必要があるようです。(今回はこれは必要有りませんでした。)

注意点として、ミドルウェアが必須パッケージの場合、MANDATORY="TRUE" CODEBASE タグ内に追加しないといけません。たいてい必須になるかと思います。

最初これを忘れていて、うまく業務アプリケーションが動きませんでした。

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

FALSE

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"/>

...省略

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

追記:

さっき気づいたんですが、パッケージ間の依存関係を上記手順では直接OSDファイルを書き換える方法でやっていました。

しかし、Application Virtualization Dynamic Suite Composition Tool というものを使えば、GUIで簡単にできるということが、山市良のえぬなんとかわーるど: App-V にあっぷっぷ: Dynamic Suite Composition に書かれてました。

参考:

MS TechNet:新しいミドルウェア アプリケーションをシーケンス処理する方法