
Embyで「System.InvalidCastException」が出て起動しない原因と復旧手順(Windows 10 / .NET 8)
Emby Serverのトレイアイコンが一瞬だけ表示されて消え、そのままプロセス自体も落ちる。再起動や再インストール、Library.db削除でも直らない。ログを見ると System.InvalidCastException が出ており、DLNA関連の Emby.Dlna.DlnaOptions が「同じ型のはずなのに別物として扱われている」という内容——この症状は、Windows環境のEmbyでまれに起きる“参照の二重化(アセンブリが二重ロードされる)”系トラブルの典型です。
- Embyで「System.InvalidCastException」が出て起動しない原因と復旧手順(Windows 10 / .NET 8)
症状の要点:トレイが消えるのは「起動直後に例外で落ちている」サイン
本文の状況は、タスクマネージャー上でもEmby Serverが消える=起動直後に未処理例外でクラッシュしている状態です。ディスク容量やLibrary.dbは関係が薄く、実際ログでは GlobalExceptionHandler: UnhandledException が出ています。
今回の例外は次の点が重要です。
-
例外種別:
System.InvalidCastException -
メッセージの核心:
「[A]Emby.Dlna.DlnaOptions を [B]Emby.Dlna.DlnaOptions にキャストできない」 -
しかも A と B は 同じアセンブリ名・同じバージョン(Emby.Dlna 1.5.4.0) なのに、
別の AssemblyLoadContext(#8 と #9)からロードされている と書かれている
この「同名同バージョンなのに別コンテキスト扱い」こそが、原因の方向性をほぼ決めます。
原因:DLNA周りのアセンブリが“二重ロード”されて型が別物になる
.NET(特に近年のランタイム)では、プラグインや拡張、動的ロードを行うと、同じDLLでも別のコンテキストでロードされることがあります。すると見た目が同じ Emby.Dlna.DlnaOptions でも、実体は
-
コンテキスト#8でロードされた
Emby.Dlna.DlnaOptions -
コンテキスト#9でロードされた
Emby.Dlna.DlnaOptions
という 別型 になり、キャスト時に落ちます。エラーメッセージが言っているのはまさにこれです。
この状態が発生する代表パターンは次の通りです。
-
どこかに DLNA関連DLLが重複配置され、Embyが別ルートからもう一度読み込んでしまう
-
プラグインの破損/更新失敗/残骸により、旧ファイルと新ファイルが混在
-
「再インストール」しても、ユーザープロファイル配下のデータやプラグインが残っており、問題が再現する
-
セキュリティソフトやバックアップ同期が絡み、DLLが部分的に置き換わった/二重化した
Library.dbを消しても直らないのは、今回の落ち方が「ライブラリDBに到達する前、DLNA構成の読み込み段階で落ちている」ためです。ログでも GetDlnaConfiguration → ReloadComponents の流れで崩れています。
まずやるべき復旧方針:プラグインとDLNA設定の“クリーン化”
狙いはシンプルで、DLNA周りが二重ロードされる原因(重複DLL・プラグイン残骸・設定破損)を除去します。重要なのは「アンインストール」や「再インストール」だけでは不十分なことが多い点です。ユーザー配下のデータが残るからです。
以下は、効果が出やすい順に並べた現実的な手順です。
1) Emby Serverを完全停止してから作業する
-
タスクマネージャーで Emby Server が残っていないことを確認
-
もしサービスとして動いているなら、サービスも停止
起動したままファイルを触ると、部分的に置き換わって状況が悪化することがあります。
2) プラグインフォルダを退避(最重要)
今回のような「同名DLLが別コンテキストでロード」は、プラグインが起点になりやすいです。
Embyのデータパスはログに出ています。
-
C:\Users\soopa\AppData\Roaming\Emby-Server\programdata
この配下に plugins(またはそれに相当するプラグイン格納場所) があるはずなので、フォルダごと別名にして退避します(例:plugins_disabled)。
これで起動できるようになれば、原因はプラグイン側(もしくはプラグインが持ち込んだDLL重複)にほぼ確定します。
3) DLNAの設定・キャッシュ相当を初期化する
例外はDLNA構成読み込みで発生しているため、DLNA関連の設定ファイル破損も疑います。
programdata配下の設定(dlna、Dlna、config など名称は環境で異なる)で、DLNA関連があれば退避して起動確認します。
ポイントは「削除」ではなく退避です。戻せるようにしておけば安全に切り分けできます。
4) “system” 配下と “programdata” 配下の混在を疑う
ログにはアプリケーションパスが次であるとあります。
-
C:\Users\soopa\AppData\Roaming\Emby-Server\system
この構成は「ユーザープロファイル配下にsystemがある」タイプです。ここで起きやすいのが、再インストールや手動上書きで
-
system内にあるEmby.Dlna.dll(または関連DLL) -
programdata側やplugins側にある同名DLL
が混在し、結果として二重ロードが発生するケースです。
対策としては、プラグインを無効化した状態で起動が通るかを最優先で確認し、通るならプラグイン群を一つずつ戻して犯人を特定します。DLNAやネットワーク系のプラグインが引き金になりやすいです。
5) .NETランタイムやWindows更新が直近で入った場合の対処
「何も変えていないのに突然」というとき、ユーザーの操作ではなく
-
Windows Update
-
.NET更新
-
セキュリティソフトの定義更新
がトリガーになることがあります。根本原因がファイル二重化である限り、上の“クリーン化”が効きますが、再発するなら次も見直します。
-
セキュリティソフトの隔離/復元履歴(Emby配下のDLLが触られていないか)
-
同期ソフト(OneDrive等)が AppData 配下を同期して競合していないか
再発防止:直し方より「壊れ方」を作らない
この手の例外は、DB破損のように単発で終わるより、環境要因で再発することがあります。再発しない運用のコツは次です。
-
Embyの更新時は「上書き」より 正規の更新手順を使う(途中でファイルが混在しにくい)
-
プラグインは一気に大量更新せず、更新後はログを軽く確認する
-
AppData配下を同期対象にしない(競合や巻き戻りが起きると混在しやすい)
-
何かおかしいときはまず plugins退避で切り分ける(原因特定が早い)
まとめ:今回のエラーは「DLNA型の二重ロード」が本命。プラグイン退避が最短ルート
Emby.Dlna.DlnaOptions が同名同バージョンなのにキャストできないのは、.NETのロードコンテキストが分かれて型が別物になっているためです。つまり「DLNAそのものが壊れた」というより、DLNA関連DLLが二重に読み込まれる状態を作っている何か(プラグイン残骸・重複DLL・更新不整合)が原因です。
最短で直すなら、
-
Embyを完全停止
-
pluginsフォルダを退避して起動確認
-
DLNA設定を退避して起動確認
-
問題のプラグイン/重複ファイルを特定して整理
この順番が効率的です。トレイが一瞬出て消えるタイプのクラッシュは、アプリ本体の再インストールだけでは直りにくいので、「ユーザーデータ側(プラグインと設定)をクリーンにして起動を通す」ことが復旧の近道になります。