KDWのUxTheme.dllと.NET Frameworkの深い関係

以前もコメントで話題に上がった話ですが、UxTheme.dllをインストールすると、.NET Framework のアプリケーションでエラーが出るようになる件についてまとめてみました。


UxTheme.dllを パスの通った場所に置くと、エラーになるわけですが、
\WINNT\Microsoft.NET\Framework\v2.0.50727 においてもエラーになりません。
しかし、 \WINNT\Microsoft.NET\Framework\v2.0.50727 に Kernel32のラッパーを簡易インストールで入れるとエラーは出なくなります。

まず、実行ファイルが .NET アプリだった場合、mscoree.dllがコールされ、\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorwks.dllが 呼び出されます。
この、mscorwks.dllが UxTheme.dllを見つけると、dfsvc.exe や ngen.exe に Windows XP以降のOSだという情報をくっつけて起動するようです。

ちなみに、Tweenのエラー情報

動作環境:
   オペレーティング システム: Microsoft Windows NT 5.0.2195 Service Pack 4
   共通言語ランタイム          : 2.0.50727.3053
   Tween.exeのバージョン    :
例外 System.EntryPointNotFoundException:
 Unable to find an entry point named 'CreateActCtx' in DLL 'kernel32.dll'.
   at System.Windows.Forms.UnsafeNativeMethods.ThemingScope.CreateActCtx
(ACTCTX& actctx)
   at System.Windows.Forms.UnsafeNativeMethods.ThemingScope.CreateActivationContext
(String dllPath, Int32 nativeResourceManifestID)
   at System.Windows.Forms.Application.EnableVisualStylesInternal
(String assemblyFileName, Int32 nativeResourceID)
   at System.Windows.Forms.Application.EnableVisualStyles()

見るとVisualStyleを有効にしようとしていて、明らかに変です。

とりあえず、UxTheme.DLLは必要なアプリだけ フォルダに入れて使う方がよさそうですね。
(WMP10の最新版からはUxThemeをSystem32に入れないようにしました)

ちなみに、IE6のShlwapi.dllも強引にUxTheme.dllを読み込むらしいので、削除には KDLLInst.exeを使ってください。

関連記事:
【KDW】uxtheme.dllでOSのバージョンチェックしてるアプリの回避

関連サイト:
LunaTear: PrimoPDFで日本語ファイル名

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です