My備忘録(又の名を雑記帳)

WinMacのMy備忘録(IT系?)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- | スポンサー広告 | トラックバック(-) | コメント(-) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |
Windows XP 以降で、 Visual C++ 2005 のランタイムである、
msvcr80.dll とか、msvcp80.dll とか msvcm80.dll をプライベートアセンブリで使う方法。(SxS(Side-by-Side)対策)

このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。
アプリケーションを再度インストールすることにより問題が解決する場合があります。

上記エラーが出た時の対応策。
ランタイムをインストールすればいいだけだけど、何らかの事情でインストールが出来ない場合の方法。
1.Microsoft.VC80.CRT.manifest というファイル名で下の内容を保存。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="Microsoft.VC80.CRT"
version="8.0.50727.762"
processorArchitecture='x86' />
<file name="msvcr80.dll"/>
</assembly>


2.動かしたい実行ファイル「example.exe」に対応する example.exe.manifest を作成。(中身は上と同じ内容)

※ マニフェストファイルの、 <file name="msvcr80.dll"/> の部分は、example.exeが使用するDLL名を書く。
上は msvcr80.dll だけが使われる場合の例。
3つ全てが必要なら、
    <file name="msvcr80.dll"/>
<file name="msvcp80.dll"/>
<file name="msvcm80.dll"/>
と書く。

使用するDLL名は、Dependency Walker や PEiD などで調べられる。
別にバイナリ覗いてもいいけど。

※ もしバージョンが違うなら、
version="8.0.50727.762"
の箇所も適宜変更。

3.example.exe と同じ場所に「Microsoft.VC80.CRT.manifest」 と 「example.exe.manifest」、そして必要なDLLを置いて、example.exeを実行すれば動く。

※ MFCもこれの応用でいけるはず。確認まではしてませんが。
Microsoft.VC90.MFC.manifest


●Visual C++ 2008 では?
Visual C++ 2008 (msvcr90.dll、msvcp90.dll、msvcm90.dll) でもやり方は同じ。
その際のファイル名は「Microsoft.VC90.CRT.manifest」。中身も適宜変更。

●Visual C++ 2010 では?
VC10から、SxS(Side-by-Side)は廃止されたので、
msvcp100.dll、msvcr100.dll をexeと同じ場所に置くだけでOK。


●参考にさせていただいたサイト
・イグトランスの頭の中(のかけら) ≫ VC++ 2005のランタイムDLLをEXEに同梱する
・VC++ 2005 Express Edition で作成したアプリケーションを別の環境で動かすには (GotDotNet Japan 掲示板)
関連記事
2009.06.13 | memo | トラックバック(0) | コメント(0) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |

関連しているかもしれない記事一覧















管理者にだけ閲覧を許可する

トラックバックURL↓


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。