人気ブログランキング | 話題のタグを見る
プロシージャ エントリ ポイント _except_handler4_common がダイナミックリンクライブラリ msvcrt.dll ...
 iTunes Store(Japan)

「プロシージャ エントリ ポイント _except_handler4_common がダイナミックリンクライブラリ msvcrt.dll から見つかりませんでした。」

自家制作のフリーウェアで、問題が発生してしまいました。
このエラーが出たのです。

今回から、開発環境をWindows 7/Visual Studio 2008 へ移行した
矢先の出来事でした。

原因は、Visual Studio のセットアップ プロジェクトが、OS依存のサテライトDLLを
セットアップに含めてしまっていたためでした。

今回の場合、oledlg.dll というDLLが含まれていて、インストーラによって
インストール先フォルダへSide-by-Side配置されるのですが、
このDLLが内部で、Windows 7に含まれるバージョンの msvcrt.dll を
要求してしまい、エラーが出てしまうというものでした。

Windows Vista以降のPCで開発を行い、Visual Studioのセットアップウィザードで
インストーラを構築すると、参照しているDLLファイルなどがインストールファイルとして追加されます。
OSのバージョン固有のDLL等も含まれてしまうため、不要なDLLは、手動で削除しないといけない。

たとえば、Windows XP でセットアッププロジェクトを作成し、
その後、セットアッププロジェクトを Windows 7 でビルドする場合。
Windows XPで見つかった依存関係ファイルを セットアッププロジェクトをビルドすると、
Windows XP依存のDLLがセットアップに含まれてしまう。
この場合、たいていはその後のWindows Vista や 7 でも実行可能。

が、Windows 7 で同じセットアッププロジェクトをビルドすると、
今度はWindows 7に依存したDLLがセットアップに含まれてしまう。
この場合、Windows XPにインストールしても、正しく動作しない可能性が高い。

しかも、セットアッププロジェクトは、勝手に依存するDLLをセットアップに含めてしまうが、
そのDLLのライセンスによっては、再配布が禁止されている可能性がある。
Visual Studioを持っていれば、開発環境の再配布可能ファイルは問題ないが、
OS依存ファイルの配布は、ライセンスに引っかかってしまうだろう。

この手のDLLの除外は、自動ではできないのだろうか。。。
ソニーストア

by isoq | 2010-03-20 00:18 | C/C++/Win32
<< フリーウェア NaiNai(な... フリーウェア NaiNai(な... >>