SSブログ

.Net Framework 4.5では VBSからArrayListが使用できない [program]

Windows10で実行したスクリプトでArrayListの作成がエラーになった



WSHには、連想配列(Dictionary)は存在しますが、
単純なコレクションは存在しません。
そこで、.NetのSystem.Collection.ArrayListを使用する事があります。

先日、インストール直後のWindows10でArrayListを使用したスクリプトを実行したところ、
ArrayListのクリエイトでエラーが発生しました。
同時に.Net Framework 3.5をインストールするように求めるメッセージが表示されました。

ネットワークに問題があったのか、
このメッセージで「この機能をダウンロードしてインストールをする」を選択したところ、
ダウンロードがエラーになってしまいました。

プレインストールの場合などは異なるかもしれませんが、
クリーンインストールしたWindows10では、
.Net Framework 4.5はインストールされていますが、
.Net Framework 3.5はインストールされていないようです。

.Net Framework 3.5のインストールは「Windows機能の有効化または無効化から.Net Framework 3.5の有効化」から行うことができます。

このとき、私の場合と同じようにエラーになる場合があります。
このあたりは検索すれば同じような記事がいくらでも出てきますが、
まずは、マイクロソフトの情報に目を通しておくとよいでしょう。
Windows 8、Windows 8.1、および Windows 10 への .NET Framework 3.5 のインストール

.NET Framework 3.5 インストール時のエラー: 0x800F0906、0x800F081F、0x800F0907

インストールメディアを利用してNET Framework 3.5をインストールしたことろ、
スクリプトが動作するようになりました。

.Net Framework 4.5では、
VBSからのArrayListの使用がサポートされなくなったのか、
ネットを検索しても
「ArrayListが使えるよ」という同じような記事はいくらでもあるのに、
ArrayListが使えないという記事が見つかりませんでした。

唯一見つけたのはMSDNのブログの記事
Usage of .NET Collections types in VBScript is not supported after .NET 4.5

この記事によると、新規インストールしたWindows Server 2012では動作しないとありますので、
.Net Framework 4.5からサポートされなくなったと言えそうです。
.Net Framework 4で動作するかどうかは環境がないので確かめられませんでした。

ちなみに、
OSと.Net Frameworkの関係についても、検索をすればいくらでも同じような記事が見つかりますが、
まず参考にするべきはマイクロソフトの情報でしょう。
.NET Framework のバージョンおよび依存関係

それにしても、
Windows8からは.Net Framework 4.5になっているので、
ネット上にあれだけの「ArrayListが使えるよ!」という記事があるのに、
「ArrayListが使えななくなったよ!」という記事がない事が解せません。
そもそもVBSがかなり特殊な環境になっている事はたしかです。
Windows8、8.1を回避してWindows7を使い続けている企業が多いので、
まだ顕在化していないのかもしれません。

しかし、Windows7のサポート切れを前に、Windows10対応が急務となっているので、
これから問題に直面することはあるでしょう。


「.Net Framework 3.5を入れればいいだけ」だが



確かにそれだけの事なのですが、
手間を惜しんだりPCの環境を変えたくないとして、それだけの事を嫌がる企業はわりと多く、
ユーザーに手間や条件をつけると嫌な顔をされたり拒否されるので、
それだけの事を動作環境として上げられないベンダーはかなり多いと思います。

もしこれからスクリプトを作成するなら、ArrayListを使わないか、
前述のMSDNのブログの記事
にあるように、ラッパーを作るのが良いかもしれません。

アクティベーション構成ファイル


も一つ、
前述のMSDNのブログの記事が挙げていたのは、アクティベーション構成ファイルを使う方法。

詳細はMSDNの記事を見ていただくとして、
簡単に言うと、
Net Framework 4.0以降を指定した[プログラム名].exe.activation_configというファイルを作成し任意のフォルダに置き、
環境変数COMPLUS_ApplicationMigrationRuntimeActivationConfigPathにそのフォルダを設定してから
プログラムを起動する。

VBSの場合、
MSDNのブログ
にあるとおり、cscript.exeもしくはwscript.exeを指定する事になります。

両記事とも、起動バッチで環境変数を指定していますが、
ユーザー環境変数およびシステム環境変数でも動作します。

また、.Net Framework 3.5をターゲットとしたアセンブリも、
同じ方法で動作させることができます。


nice!(9)  コメント(0) 

nice! 9

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント