Office 2024/Microsoft 365のActiveXトラブルシューティングの知識マップ(知識グラフ)
ActiveX
実務ではCOMベースのコントロールやその周辺資産をまとめて指す言葉として使われる技術群。特に.ocx形式のUIコントロールやIE/コンテナへ埋め込む部品を含むことが多い。
ActiveXコントロール
COM(コンポーネントオブジェクトモデル)
公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
CLSID(Class ID)
COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。
WOW6432Node
64bit Windows上で32bitアプリ向けのレジストリ内容が物理的に置かれる場所。
regsvr32
DLLやOCXなどのCOMコンポーネントをレジストリへ登録・登録解除するコマンドラインツール。
Regasm.exe
.NET FrameworkのアセンブリをCOMへ登録するための登録ツール。
bitness一致要件
ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。
32bit/64bitの一致
ActiveX動作失敗
Office上でActiveXコントロールがボタン無反応や埋め込みオブジェクトの不具合として、意図どおりに動作しなくなる状態。
ActiveXコントロールが動かない状態
トラスト センター
Officeのセキュリティ設定(ActiveXの設定、保護ビュー、信頼済みドキュメント、信頼できる発行元、マクロ設定など)をまとめた設定画面。
信頼された発行元ストア
信頼する発行元のコード署名証明書を登録する論理ストア。
コード署名証明書
ソフトウェアの発行元を証明し、改ざんを検出するための証明書。
Authenticode証明書
Zone.Identifier(Mark of the Web)
ブラウザーなどでダウンロードしたファイルに付与される代替データストリーム。ファイルの出所(インターネット由来など)を記録し、SmartScreenや保護ビューの判定材料になる。
保護ビュー
ネットワーク共有やメール添付など、信頼できない可能性のある場所から開いたファイルを読み取り専用の隔離環境で表示するOfficeの機能。
.NET Framework
Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。
Visual C++ 再頒布可能パッケージ
Visual C++で作られたアプリケーションやコンポーネントの実行に必要なランタイムDLLをまとめて配布するパッケージ。
Visual C++再頒布可能パッケージ
Process Monitor(procmon.exe)
ファイルI/O・レジストリ・プロセス/スレッド活動をリアルタイムに監視できるSysinternalsのツール。Advanced Outputを有効にすると、IRPやファストI/Oのカーネル側の語彙で操作を表示する。
Process Explorer
プロセスに読み込まれているDLLだけでなく、ハンドル・スレッドスタック・GDI/USERオブジェクト数なども確認できるSysinternalsのプロセス監視ツール。管理者として実行すると他ユーザーやサービスのプロセスも参照できる。
IEモード
設定されたサイトに対してMicrosoft Edgeが IE系のエンジンを使い、ActiveXを含む一部のIE機能を動かすための互換レイヤー。延命策として位置づけられる。
Enterprise Site List
IEモードで表示させる対象サイトのURLを登録する、企業向けのサイト一覧構成。
エンタープライズ サイト リスト
Click-to-Run
仮想化された配置と自動更新を前提とする、現在のOfficeのインストール方式。
Click-to-Runインストール
Office MSIインストール(旧方式)
Click-to-Run以前にOfficeの配布・導入で使われていたMSIベースのインストール方式。
MSIベースのOffice
DisableAllActiveX(検証用レジストリ)
HKCUのレジストリ値でActiveXの一括無効化を解除する検証専用の設定。恒久的な対応として使うことは推奨されない。
ActiveX一括無効の解除
月次エンタープライズ チャネル
Microsoft 365 Appsの更新チャネルの1つで、機能更新が月1回・予測しやすいタイミングで配信される。
ActiveXコントロールはCOM(コンポーネントオブジェクトモデル)のコンポーネントとして実装されており、ホストはCOMの仕組みでそのクラスを生成する
COMはCLSIDというGUIDでクラスを一意に識別し、レジストリ経由でアクティブ化する場合はレジストリのCLSIDキー配下からその値で実装を引く(side-by-sideマニフェストを使うregistration-free COMでは、レジストリではなくマニフェストから引く)
32bit Officeを64bit Windows上で使う場合、COMの登録実体はWOW6432Node配下のCLSIDキーに保存される
regsvr32はネイティブのCOM/ActiveX DLLのレジストリ登録・登録解除を実装するコマンドラインツールである
.NETアセンブリのCOM登録はregsvr32ではなくRegAsmで行う
RegAsmで登録する場合も、RegAsm自体のbitnessをOfficeのbitnessに合わせる必要があり、揃っていないとレジストリ上は登録成功でもOfficeからは見つからない
64bit Officeに32bit専用のコントロールを載せるなど、ActiveXの動作にはOfficeとコンポーネントのbitness一致が必要になる
Officeとコンポーネントのbitnessが一致しないと、ActiveXコントロールは動作しない
Office/Microsoft 365アプリで使う場合、ActiveXの設定はOfficeのトラスト センターの「ActiveX の設定」画面で構成する(IEなど他のホストアプリではActiveXは別の場所で構成する)
トラスト センターは、信頼できる発行元(Trusted Publisher)の一覧を含む複数の設定領域を持つ
信頼された発行元として認識されるには、コード署名証明書で署名されている必要がある
自社配布のActiveX/マクロ/アドインにはコード署名を行い、Trusted Publisherを一元管理することが企業向けの推奨設定とされる
ネットワーク共有やメール添付から取得したファイルにMOTW(Zone.Identifier)が付いていると、Officeは保護ビューでファイルを開く
保護ビューで開かれたファイルではActiveXやマクロの動作が止められるため、通常のActiveX障害のように見える
.NET製のActiveX/COMコントロールは.NET Frameworkランタイム(例: 4.8.1)を前提とする
ネイティブC++で書かれたActiveXコントロールは、Visual C++再頒布可能パッケージに依存することがある
Procmonで再現時のログを取り、NAME NOT FOUNDなどでフィルタリングすると、どのDLLやレジストリキーが見つからなかったか確認できる
Process Explorerでプロセスに読み込まれているDLLの一覧を確認できる
組織全体で自動適用する場合、IEモードはブラウザ全体のスイッチではなく、Enterprise Site Listに登録したサイトへ組織全体で自動適用する形で構成する(利用者が手動で「Internet Explorer モードで再読み込み」する経路ではサイト一覧は要らない)
IEモードが未構成だと、社内Web連携の一部が通常のActiveX障害に見える形で動かなくなることがある
Click-to-Runは、仮想化された配置と自動更新を前提とする、Officeの旧来のMSIインストール方式の後継の導入方式である
MSI時代の導入手順や自己登録前提の設計は、Click-to-Runの仮想化された配置ではそのまま通らないことがある
DisableAllActiveXレジストリ変更による一括有効化は検証専用であり、恒久対応として使うことは推奨されない
legacy ActiveX依存が強い端末には、変化点が読みやすい月次エンタープライズ チャネルが推奨される