2013年7月30日火曜日

Officeを仮想化した場合に「既定のメールクライアントが設定されていないか~」エラーが発生する

Officeを仮想化した場合に「既定のメールクライアントが設定されていないか~」エラーが発生する

Microsoft Officeを仮想化して、Windows7で実行した場合に
エラーが発生することがあります。
(VMware ThinAppに限らず、Microsoft App-Vでも発生する事があります)

「既定のメールクライアントが設定されていないか、現在のメールクライアントがメールを受け取れない状態にあります。Microsoft Office Outlook を起動して、既定のメールクライアントに指定してください。」

原因:
既定のメールクライアントが正しく設定されていないためですが、
仮想化されたOfficeを利用する場合だけ問題が発生する事があります。

物理側でメールクライアントが設定されているにも係わらず、発生する場合は、
既定のメールクライアントの設定値が格納されている仮想レジストリが不正な状態に
なっている事が原因です。


切り分け方法:
仮想レジストリを参照するために、vRegEdit.exe(※1)を起動します。

以下を開きます。
「HKEY_LOCAL_MACHINE\Software\Clients\Mail」

物理側のRegEdit.exeを起動します。
regedit.exe -mで複数のレジストリエディタが起動できます。
http://tunemicky.blogspot.jp/2013/03/regeditexe.html



仮想レジストリと物理側のレジストリを比較します。

仮想レジストリ側の[PreFirstRun]を削除します。
「HKEY_LOCAL_MACHINE\Software\Clients\Mail\Microsoft Outlook」
を削除します。

その後、問題が変化するかを確認します。

エラーメッセージが以下のように変化した場合
「要求されたアクションを実行するように関連付けられた電子メール プログラムがありません。電子メール プログラムをインストールするか、または既にインストールされている場合は、コントロール パネルの [既定のプログラム] で関連付けを作成してください。」


既定のメールが物理側で正しく設定されているかを始めに確認します。
問題なくメーラーが設定されている場合は、引き続き以下の対処を行います。

対処方法:
この問題は、物理側のレジストリ設定と仮想側のレジストリ設定が不一致になっていて
しかも、仮想レジストリの初期値に中途半端な状態の「既定のメール設定」が
入っていることが原因です。
対処方法としては、物理側に正しく設定されているレジストリを仮想アプリ側で
透過させる必要があります。
※仮想側のレジストリ設定を削除すると、物理側の設定が透過されます。

HKEY_LOCAL_MACHINE.txtを開きます。
「HKEY_LOCAL_MACHINE\Software\Clients\Mail」を検索します。

Hitしたら、該当するパスを全て削除します。
例)
isolation_full HKEY_LOCAL_MACHINE\Software\Clients\Mail
  Value=
  REG_SZ~Microsoft Outlook#2300
  ---省略---

isolation_full HKEY_LOCAL_MACHINE\Software\Clients\Mail\Microsoft Outlook
  Value=
  REG_SZ~Microsoft Office Outlook#2300
  ---省略---

HKEY_LOCAL_MACHINE.txtの編集が終わったら保存し
Build.batを実行します。
vRegEdit.exeを起動し、物理側のレジストリ設定と一致していればOKです。

※必ずSanboxを初期化(削除orリネーム)してから、検証してください。


※1 vRegEdit.exeの作り方
エントリーポイントとしてvRegedit.exeを作成します。
Package.iniファイルを編集します。

例)Package.iniファイルの一番下の方にRegedit.exeのエントリーポイントの設定箇所があります。
[vRegedit.exe]
Source=%SystemRoot%\regedit.exe
Shortcut=Office2003.dat
Disabled=0

編集後にbuild.batを実行します。
vRegedit.exeがbinフォルダに作成されます。