USMT 4.0 を x86 から x64 に移行すると、COM+ コンポーネントが破損します

この記事は、x86 プラットフォームから x64 プラットフォームに移行すると COM+ コンポーネント設定が破損する問題を解決するのに役立ちます。

適用対象: Windows 10 - すべてのエディション
元の KB 番号: 2481190

現象

ユーザー状態移行ツール (USMT) 4.0 を使用して x86 プラットフォームから x64 プラットフォームに移行すると、COM+ コンポーネント設定が破損します。

注:

この問題は、x86 から x86 または x64 から x64 プラットフォームに移行する場合には発生しません。

COMEXP を開く。MSC または DCOMCNFG.EXE して Component Services\Computers\My Computer に移動すると、次の画面エラーが発生します。

要求されたアクションを実行するアクセス許可がありません。

さらに、アプリケーション ログにイベント ID 4434 が記録されている場合があります。

ログ名: アプリケーション
ソース: Complus
イベント ID: 4434
レベル: 警告
ユーザー: N/A
タスク カテゴリ: セキュリティ
キーワード: クラシック
コンピューター: win7-1.contoso.com

呼び出し元がこの呼び出しを行うことが適切に承認されていないため、COM+ アプリケーション内のオブジェクトに対するメソッド呼び出しが拒否されました。 COM+ アプリケーションは、アプリケーション レベルとコンポーネント レベルのアクセス チェックを使用するように構成されており、これらのチェックの適用は現在有効になっています。 このメッセージの残りの部分は、呼び出し元が呼び出そうとしたコンポーネント メソッドと呼び出し元の ID に関する情報を提供します。SVC/Lvl/Imp = 10/6/3、Identity=<<DOMAIN\Username>>

原因

これは、x86 から x64 に移行するときの USMT に関する既知の問題です。

解決方法

回避策

USMT 4.0 の問題を回避するには、config.xml ファイルを指定し、[Microsoft-Windows-COM-ComPlus-Setup] を移行しないように設定する必要があります。

USMT 用の config.xml ファイルをまだ使用していない場合は、/genconfig スイッチを構文に指定して自動的 scanstate.exe 生成できます。 例:

/scanstate.exe /genconfig:config.xml /i:migdocs.xml /i:migapp.xml

USMT ファイルと config.xml ファイルの詳細については、次の Microsoft TechNet の記事を参照してください。

USMT .xml ファイル

config.xml ファイルを生成したら、ソース オペレーティング システム (OS) に応じて、次のセクションを編集する必要があります。

Windows XP - <コンポーネント displayname=" Microsoft-Windows-COM-ComPlus-Setup-DL " migrate=" no "

Windows Vista または Windows 7 - <コンポーネント displayname=" Microsoft-Windows-COM-ComPlus-Setup " migrate=" no "

変更を config.xml に保存します。 scanstate.exe を使用して問題を回避する場合は、更新された config.xml を含めます。 例:

scanstate.exe c:\mystore /i:migdocs.xml /i:migapp.xml /config:config.xml /v:5

これにより、移行ストアとして c:\mystore を使用して scanstate.exe が実行され、詳細ログが有効になっている移行の MigDocs.XML、MigApp.xml、および Config.XML が含まれます。

詳細

既に移行済みで COM+ が破損しているシナリオの場合は、次の手順を使用して元の COM+ リポジトリを復元できます。

管理コマンド プロンプトから、次の 3 つのコマンドを実行します。

CD %windir%\winsxs\
CD *amd64*com-complus*runtime*  
Dir  

R000000000001.clb が存在することを確認します。 次に、次のコマンドを実行して、現在のディレクトリから C ドライブのルートにコピーします。

copy R000000000001.clb C:\R000000000001.clb  

次に、次の VB スクリプト (破線の間) をコピーして貼り付けてファイルを a.txt し、COM_Restore.vbs 名前を変更します (.txt ファイル拡張子を .vbs に変更してください)。

 =============================================================================
Dim objComCatalog  

Set objComCatalog = CreateObject("COMAdmin.COMAdminCatalog")  
objComCatalog.RestoreREGDB "C:\R000000000001.clb"  

 MsgBox "Backup Restored!"  
Set objComCatalog = Nothing  

=============================================================================

スクリプトを C:\ のルートに保存します。

コマンド プロンプトから、次のコマンドを実行します。

 C:\cscript COM_Restore.vbs  

バックアップが復元されたことを示すポップアップ メッセージが表示されたら、コンピューターを再起動します (必須)。

最後に、コンポーネント サーバー (dcomcnfg.exe) を開き、エラーが引き続き発生しているかどうかを確認します。

注:

管理者以外のユーザーとしてログインしていて、コンポーネント サービスを開始しようとしている場合は、イベント ID 4434 が必要です。 管理者以外のユーザーは COM+ システム アプリケーションの管理者ロールの一部ではありません。そのため、セキュリティ警告はイベント ログに記録されます。 これは、COM+ カタログが破損していることを意味するものではありません。