お世話になります。
只今、C/C++/MFCのランタイム・ライブラリの有無チェッカをVCで作ろうとしています。
僕はdllには詳しくないためランタイムの種類が分かりません。
dllのファイル名や場所(システムフォルダで良いのか?)などを
教えて下さい。
また、バージョンの取得方法も一緒に教えて欲しいです。
フリーソフトの『XPの救急箱』と同じようなものと作ろうとしています。
dllの種類がどのくらいあるのか知りたいです。
開発環境:Windows XP Home SP3
動作環境:Windows一般で動けるようにしたいです
この質問は他にも質問しています。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200902/09020016.txt
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+200902/09020011.txt
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200902/09020017.txt
いろいろと知っているマルチな方が居りましたら
別の質問もお願いします。
まずはVCのヘルプのキーワードに「再頒布」を入力してみてください。
VCのバージョンによってDLLは異なります。
> 動作環境:Windows一般で動けるようにしたいです
ライブラリリンクで作ればDLLなくても動きます(基本コントロールのみなら)。
DLLの有無を知るだけでいいのですか?
それともDLLがLoadできるか否かを知りたいのですか?
後者はPathの設定や実行モジュールの位置に依存します。
# あったところでLoadできなきゃ意味ないしねー
みいさん、
επιστημηさん
レスありがとうございます。
>ライブラリリンクで作ればDLLなくても動きます(基本コントロールのみなら)。
自作ソフトならこれで良いけど、他の人の作ったソフトを
動かすために dll を確認するツールを作りたい訳です。
>DLLの有無を知るだけでいいのですか?
>それともDLLがLoadできるか否かを知りたいのですか?
出来れば有無だけでなく正しくソフトでロードが可能かどうかも調べたいです。
(バージョンの確認も行いたい)
>後者はPathの設定や実行モジュールの位置に依存します。
確かにソフトによっては dll をシステム・フォルダ以外に置いて
動かすタイプがあり、基本的にシステム・フォルダ内の dll に
限定しようかと思っている。
「システム・フォルダ」がどこを指しているか知らないが、最近のDLLは
サイド・バイ・サイドになってるから、必要なDLLの特定はアプリ作成者
でないと難しいのでは?
無駄な努力にならないとよいのですが。
maruさんレスありがとう。
>無駄な努力にならないとよいのですが。
説明書で MFC のランタイムがないと動かないとか書かれていることがある。
この場合、どのフォルダに置くようにとはかかれていないので
必要な dll はシステム・フォルダに置けばよいと解釈している。
ちなみに僕の環境は VC2003.NET を使っているためか、
MFC3.0 はなく MFC4.0 と MFC7.0 が存在するようです。
古い MFC のランタイムはどのように用意すれば良いでしょうか?
> この場合、どのフォルダに置くようにとはかかれていないので
> 必要な dll はシステム・フォルダに置けばよいと解釈している。
昔はそうでしたが、現在はランタイムをインストールするために再頒布
ファイルがあります。
> 説明書で MFC のランタイムがないと動かないとか書かれていることがある。
今日の感覚では、非常に不親切なプログラムですね。
MFCランタイムが必要ならば、アプリのインストール時に再頒布ファイルも
同時にインストールすべきでしょう。
> 古い MFC のランタイムはどのように用意すれば良いでしょうか?
C:\Program Files\Microsoft Visual Studio .NET 2003\1041\redist.txt
を読んでください。インストール時にvcredist_x86.exeを実行しろと書いて
あります。このファイルはインストール先のどこかに格納されているはずで
す。
ちなみにあなたが考えているツールはDependcy Walkerではないですか?
VC6.0には標準でついてきますが、.Net 2003以降ツールメニューから
見かけなくなりましたね(.Net 2002からかな?)。いまVC2005の
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin
をみてみたらExe, Dll, HLPはあったけど、メニューには登録されてない。
VC2008にいたってはExeさえない。やっぱり、使用する機会がないという
ことかな。
maruさんへ。
> C:\Program Files\Microsoft Visual Studio .NET 2003\1041\redist.txt
読んでみました。
たくさんあるようですね。
> ちなみにあなたが考えているツールはDependcy Walkerではないですか?
今はここまで本格的には考えていません。
(興味はありますけどね)
今のところ
msvcrt.dll(VC6)
msvcr70.dll
msvcr71.dll
msvcrt20.dll
msvcrt40.dll
msvcr9.dll(2008)
mfc40.dll
mfc40loc.dll
mfc42.dll
mfc42loc.dll
mfc70.dll
MFC71.dll
などをチェックするように考えている。
バージョンはリソースから取得できることが分かった。
GetFileVersionInfo
次のソフトを参考に自分なりのチェッカを作ってみます。
http://www.forest.impress.co.jp/article/2006/09/22/runtimedetector.html
http://support.microsoft.com/kb/125476/ja
ツイート | ![]() |