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を使ってください。
Comments