[Top][戻る]

古いインストーラーが拒否されてエラーになる時に使うソフト(MSIOptOut)


ダウンロード

最近のWindows updateでインストールされる修正プログラムの影響で、古いタイプのインストーラーが拒否されてエラーになるようになってしまいました。
具体的には、Visual Basic6で作成できるデストリビューションウィザードや、古いInstallShildで作成されたインストーラーは使用できません。
[MS14-049] Windows Installer サービスの脆弱性により、特権が昇格される (2014年8月12日) 」による、OS保護機構の仕様変更が原因です。
この修正により、拒否されるようになったインストーラーは、レジストリの規定の場所に、一時的なホワイトリストを作成しないとインストールを拒否されます。

このソフトがやってる内容の詳細は「[MS14-049] Windows Installer サービス用のセキュリティ更新プログラムについて (2014 年8月12日) 」を参照ください。



 具体例がないと、説明が分かりにくいので、こちらのNTSOFTさんのソフトを事例に紹介させていただきます。
 Visual Basic 6.0 SP6 ランタイムライブラリ

 インストーラーを起動すると、最近はこんなエラーが表示されて中断されます。

 というわけで、こうならないようにするソフトです。


 使い方は、MSIOptOut.exeを起動すると、こんな画面が表示されます。
 product codeを入力して、適用ボタンを押します。(product codeは後で説明します)

 「適用」ボタンを押すと、このproduct codeを持つインストーラーを動作させますよ!というホワイトリストを登録します。
 「終了」ボタンを押すと、何もせず終了します。
 「レジストリを削除して終了」ボタンを押すと、ホワイトリストやホワイトリスト参照許可関連のキーの全てを削除して終了します。

 「適用」ボタンを押して、ホワイトリストに登録されている間にインストール作業を行ってください。
 (補足しておきますが、この手のインストーラーは管理者権限でインストール作業を行う必要があります)

 product codeをホワイトリスト登録して、レジストリを削除して終了することでレジストキーごと削除し、レジストリに残骸を残さず終了させるという使い方をします。
 product codeの記入を多少間違っても、上記のインストールに失敗するエラーが出るだけで大して実害はありませんが、ホワイトリスト参照許可のレジストリ設定値は必ず削除して作業を終了するようにしてください。




●product codeとは
 product codeってちょっと聞きなれないと思いますが、例えばインストールする時 or アップデートする時ってインストーラの動きが変わりますよね。
 つまり、インストール済みか否かを判断するためのユニークな鍵となるコードが、この「product code」です。
 OSが認識するアプリケーション名ともいえます。

 これがどこに書かれているかというと、拡張子がMSIのファイルのプロパティを見ると・・・

 こんな所に記載されています。
 気をつけなきゃいけないのは、中かっこ「{」「}」これらも必要な文字です。
 上記の「Visual Basic 6.0 SP6 ランタイムライブラリ」の場合は、「{59FEFE3F-8119-457C-A4EE-CF24202DD9D2}」を入力することになります。




●MSIファイルが見つからない場合
 上記の「Visual Basic 6.0 SP6 ランタイムライブラリ」の場合を例題にします。
 このソフトはCABの自己解凍形式で配布されているので、まずは何でも解凍できる系の解凍ツールを使って解凍します。(ウチのAs/Rとか使っても良いです)
 そうすると、中から拡張子がMSIのファイルが出てきますので、このファイルのプロパティを参照します。




●動作環境
 起動確認をしたのは、Windows 7/Vistaですが8系も問題ないと思われます。
 ただし、このソフトが有効活用される期間はWindowsUpdateの状況次第です。
 XPのサポート終了後にこのような対処が行われたので、XPでは本ソフトは必要にならないと思いますが(要するにXPの脆弱性はほったらかし)、一応動作するように作ってます。




●このソフトのインストール
 適当なフォルダーに展開してください。




●このソフトのアンインストール
 インストール時に展開したフォルダーごとMSIOptOut.exeを消してください。
 設定類などは一切ありませんので、ファイルにもレジストリにも保存されません。