仮想アプリケーションを利用している時に
MSIの自己修復(self-repair)画面が表示されることがあります。
理由は様々ですが、MS-Officeを仮想アプリとして利用している場合に
発生することが多いです。
特に、別バージョンのMS-Officeをネイティブにインストールしている場合は
かなりの確率でこの自己修復を見ることになります。
MS-Office特有の問題ではなく、MSI形式でインストールされるアプリで
自己修復機能を持った物であれば、発生する可能性があります。
※ThinAppに限らず、一般的なインストール環境でも、App-Vでも発生する問題です。
大切な前提条件
クリーンなWindows OS (何もアプリがインストールされていない)環境では
問題なく利用できる。
自己修復が表示されないという事が大切です。
初めに、この修復処理自体は悪いことではありません。
人間の免疫に似ていると思います。
ウイルス等を駆除して、健康な状態を保とうとする防衛措置ですね。
しかしながら、時にはその防衛力の高さから、過敏な反応により
問題のない物をウイルスと判断して、攻撃することが問題になる場合があります。
いわゆるアレルギー反応です。
そんな私もスギ花粉に悩まされています。
本来は、スギ花粉自体は問題ないのに、過剰な防衛反応により
だるさや鼻水などの症状が現れます。
スギ花粉の対策はたくさんありますが、鼻の粘膜を焼く事で、対処するレーザー治療がありますね。
花粉が飛散する時期の前に処置して、ピークをすぎる頃には
粘膜はもとに戻り、ノーマル状態となるのかな。。。
やってみたいんですが、やったことは無いです。。。
と全然関係ない話ですが、今回のMSI 自己修復の対処は
鼻の粘膜を焼くレーザー治療と似ている気がします。(無理矢理ですが)
流れとしては、以下のステップで対処していきます。
1.アレルゲンを特定します。
何にアレルギー反応を起こしているのか、(MS-Office、Adobe製品、その他なのか)
2.効果があるかを試します。
レジストリを変更して、抑止効果があるかを試します。
3.レーザー治療を行います。
仮想アプリケーションパッケージの仮想レジストリの初期値を変更して
再buildします。
具体的な対処方法は以下です。
実行環境:
Windows 7 SP1 x64
Office2010インストール環境
仮想アプリ:
Office2000 SP3
(Word,Excel,Powerpoint,Access)
症状:
Word2000を起動すると、MSIの自己修復が起動してしまう。
※仮想レジストリを編集する必要があるので、
エントリーポイントとしてRegedit.exeを作成しておいてください。
本物のRegeditと区別するために、ここでは、vRegedit.exeと呼びます。
1.アレルゲンの特定方法
MSIの自己修復が起動されると、イベントビューワーのアプリケーションに
ログが登録されます。
-------------------------------------------
説明:
製品 '{00000411-78E1-11D2-B60F-006097C998E7}'
機能 'ProductNonBootFiles'
コンポーネント '{BF4D7A70-D89D-11D1-A17D-00A0C90AB50F}' の検出に失敗しました。
リソース 'C:\Windows\system32\MSVBVM60.DLL' がありません。
-------------------------------------------
これが重要な情報です。
3つ重要な情報が書かれています。
(製品、機能、コンポーネント)
今回は製品、機能を利用します。
1つめは、何のアプリなのかの情報が記録されています。
製品:
{00000411-78E1-11D2-B60F-006097C998E7}
vRegedit.exeを起動します。
レジストリで以下のキーを開きます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products
検索します。(00000411-78E1-11D2-B60F-006097C998E7)
みつかりません。。。
実は、00000411-78E1-11D2-B60F-006097C998E7を翻訳しないといけません。
翻訳前
00000411-78E1-11D2-B60F-006097C998E7
翻訳後
114000001E872D116BF00006799C897E
この翻訳には決められたルールがあります。
00000411-78E1-11D2-B60F-006097C998E7
2つに分割します。
00000411-78E1-11D2
B60F-006097C998E7
前半部分(00000411-78E1-11D2)をハイフンで区切られた単位で逆から並び替えます。
00000411 -> 11400000
78E1 -> 1E87
11D2 -> 2D11
連結します。
11400000-1E87-2D11
後半部分(B60F-006097C998E7)を2文字単位で左右を入れ替えます。
分かりにくいので、2文字単位にハイフンを入れてから左右を入れ替えます。
B60F -> B6-0F
006097C998E7 -> 00-60-97-C9-98-E7
その後、
B6-0F -> 6B-F0
00-60-97-C9-98-E7 -> 00-06-79-9C-89-7E
連結します。
6B-F0-00-06-79-9C-89-7E
前半部分と後半部分の結果を連結します。
11400000-1E87-2D11-6B-F0-00-06-79-9C-89-7E
最後にハイフンを削除します。
114000001E872D116BF00006799C897E
vRegedit.exeから以下のキーを開きます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products
検索します。(114000001E872D116BF00006799C897E)
見つかります。
その下の階層にある、InstallPropertiesを開きます。
右ペインのDisplayNameを見ると、何のアプリ種別かわかります。
この場合は、Microsoft Office 2000 SR-1 Premiumです。
2.効果があるかを試します。
次に、アレルギー反応を起こしている、具体的な機能を無効化してしまいます。
機能 'ProductNonBootFiles'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\114000001E872D116BF00006799C897E
Featuresを開きます。
※編集前に念のため、レジストリをバックアップしておいてください。
たくさんありますが、ProductNonBootFilesを探します。
ダブルクリックして、値のデータを空っぽにします。
※値のデータの内容を空白状態にします。値の名前自体をを削除しては、いけません。
次に、効果があるか、もう一度アプリを実行してみます。
まだ続く場合は、イベントビューワーを確認してみます。
機能の部分が変わっている事が多いので1つの対処だけではなく、
繰り返して対処していきます。
また、似たような名前も合わせて、空白にする場合もあります。
このフェーズでは、とにかく効果があるまで、空白にしまくります。
3.レーザー治療を行います。
最後に、効果があるレジストリが分かったので、仮想レジストリの
初期値を空白にするように対処しておきます。
今回の場合は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\114000001E872D116BF00006799C897E\Features
ProductNonBootFiles
です。
変更前:
変更後:
Value=ProductNonBootFiles
REG_SZ~#2300
にします。REG_SZ~#2300が空白の意味です。
最後にBuild.batを実行し、仮想アプリを再作成します。
その後、Sandboxを削除して動作確認を行います。
副作用について
私の経験上、この方法で副作用が発生したことは、ありません。
仮想レジストリを変更するため、実際のレジストリや実際にインストールされているアプリには
影響がないためだと思います。
※とは言え、自己責任でお願いしますね。
MSI修復処理で止まってしまう問題への対策(2012/08/09追加):
MSIの修復処理が動作していると、エラーが発生したり
修復処理が固まったようになってしまいます。
固まらずに、処理を終わらせるための対処は、以下になります。
一瞬表示されるだけで、MSIのインストール画面が自動的に終了するようになります。
HKEY_LOCAL_MACHINE.txtに以下の内容を追加します。
isolation_full HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSIServer
Value=ImagePath
REG_EXPAND_SZ~"%SystemSystem%\msiexec.exe" /V#2300
http://blogs.vmware.com/thinapp/2012/04/solving-msi-self-repair-issues-in-thinapp.html
ThinAppBlogとは若干対処方法が違いますが、ほぼ同じです。
あちらのほうがより、繊細にレーザー照射を行なっていますね。
ちなみに、私はこの方法を会得するのに3年掛かりました。
スギ花粉症について:
緩和するお米を研究されているリンクです。期待
http://www.nias.affrc.go.jp/gmo/basic.html
一般的解説バージョン
http://www.nias.affrc.go.jp/gmo/simple.html
詳細解説バージョン
http://www.nias.affrc.go.jp/gmo/basic.html
もっと知りたい花粉症のレーザー治療
http://trendy.nikkeibp.co.jp/article/special/20101215/1033943/