none
Vc9でのランタイムdll、MFCのインストール方法 RRS feed

  • 質問

  • インストーラを作ろうとしています。

     

    これまでコンパイラはVS2003でした。必要な共有モジュール(mfc70.dllなど)は実行プログラムと同じ場所やsystem32フォルダに配置するようにしており、問題なく動作していました。(実際は、dll hellの問題があったのでしょうが)

    このたびコンパイラがVS2008となり、必要なモジュールもmfc90.dllに変わったのですが、同じ方法では配置先のコンピュータでプログラムが動作しなくなりました。

    調べた結果、同じフォルダにあってもダメで、そのマシンで共通の場所(C:\WINDOWS\WinSxS)にインストールされていないと動かない、と言う仕様に変更になったのかな?というところまで来ました。

     

    ここで質問です。

    ・これまでと同じように、同一フォルダに必要なdllがあればそれを読み込むような設定を行うことは可能でしょうか?

     

    また、共通の場所に置くファイルも、バージョンまで一緒でないと正しく起動しません。

    例) x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

    上記フォルダ名の "9.0.21022.8" の部分。

    ここが、実行プログラムをコンパイルする時にできるマニフェストにversionに書かれているものと共通でないとダメみたいです。

     

    ・マニフェストを書き換えることで参照するバージョンを変更させることは可能でしょうか?或いは、どのバージョンでも参照できるようなmanifestの記述は可能なのでしょうか?

     

    以上です。こちらの環境など、不明点があれば追記しますので、よろしくお願いします。

    2008年11月4日 10:30

回答

  •  runta さんからの引用

    ここで質問です。

    ・これまでと同じように、同一フォルダに必要なdllがあればそれを読み込むような設定を行うことは可能でしょうか?

    Private Assemblyとして配置すれば可能です。

     

    http://msdn.microsoft.com/ja-jp/library/ms235531.aspx

    http://msdn.microsoft.com/en-us/library/aa375674(VS.85).aspx

     

    今回の解決方法としてはマージモジュールをインストーラに組み込むか、Private Assemblyとして適切に配置するかでしょうか。

     

     runta さんからの引用

    また、共通の場所に置くファイルも、バージョンまで一緒でないと正しく起動しません。

    例) x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

    上記フォルダ名の "9.0.21022.8" の部分。

    ここが、実行プログラムをコンパイルする時にできるマニフェストにversionに書かれているものと共通でないとダメみたいです。

    Side by Sideの導入契機が、同じ名前のDLLなのにバージョンが違う、バージョンが違うことによって動作が違う、インストーラでバージョンを確認せずに古いバージョンを上書きしてしまうと言ったトラブルがあったことが理由の一つになっています。

    ですので、バージョンの一致が求められるのは必然です。

     

    このあたりは「DLL Hell」や「Side by Side」(サイド バイ サイド)などで検索してみて下さい。

     

     runta さんからの引用

    ・マニフェストを書き換えることで参照するバージョンを変更させることは可能でしょうか?或いは、どのバージョンでも参照できるようなmanifestの記述は可能なのでしょうか?

    先にも書きましたが、新しいバージョンが必要なのに古いバージョンを参照すると、何が起きるか分かりません。

    少なくともランタイムについては、どのバージョンであっても良いなんてことは言えません。

    従って、適切なバージョンを要求するように書くことがアプリケーションmanifestに求められています。

     

     

    ※参考

    ライブラリ作成者側は特定のバージョンが要求されたときに、別のバージョンにリダイレクトするといった発行者ポリシーも設定できるため、アプリケーションが古いバージョンを要求しているときは新しいバージョンを読むように指示することができます。

     

    http://msdn.microsoft.com/en-us/library/aa375682.aspx

    2008年11月4日 14:21
    モデレータ
  • 補足で。

     

    現状のランタイムのインストールは

    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2

    http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=ja

    等からインストーラをダウンロードして、インストールする事が可能です。

     

     

    2008年11月5日 0:26
  •  runta さんからの引用

    それとも、インストーラがOSが何であるか検知し、XP以降ならマージモジュールのインストール、2000ならこれまでと同じようなインストール(でいいのでしょうか?)を行うようなハンドリングが必要なのでしょうか?

    そのままでうまくいってくれる…はず。

    試していません。

     

     runta さんからの引用

    もしかすると、vc2008でコンパイルされたプログラムはwin2000での実行を保証していないとか、あったりしますでしょうか。。

    コンパイラレベルではWindows 2000は対応となっています。

    但し、MFCの追加クラスやセキュリティが強化されたランタイム関数等、一部の要素でWindows 2000のサポートがないものがあります。

    そのあたりはドキュメントをきちんとご確認ください。

     

    例:

    http://msdn.microsoft.com/ja-jp/library/sxtz2fa8(VS.80).aspx (Windows 2000に対応していない関数)

     

     runta さんからの引用

    # 実際にwin2000上で試せばいいのですが、すぐ試せる環境にないため申し訳ありませんが、質問させていただいています。

    不安なのであれば、すぐにでもWindows 2000のテスト環境を構築してください。

    先のインストーラの問題も最初の段階である程度検証しておかないと、開発終盤に「やっぱりVC2008だめだったよ」じゃ、取り返しがつきませんから。

    2008年11月6日 14:20
    モデレータ
  • ここのところ、フォーラム覗けてなかったんで見落としてたぁ。。。

     

    んと、C/C++ランタイムのマージモジュール自体は、Win2000 以降の環境で適切な形でインストールされるように作られています。というか。。。9x まで考慮された記述になってますねぇ。。。ちゃんとテスト通ってんだろうな。。。不安になるぞ。。。orz

     

    ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

     

    2008年11月7日 5:07
  • >ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

     

    コンシューマーズOSでなければ、「実行モジュール単体」ならばという条件で

    下記の記述によると

     

    http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx

     

    #define WINVER  (設定値)         // 最小限必要なプラットフォームのバージョン番号

    #define _WIN32_WINNT  (設定値)  // 同じく、最小限必要なプラットフォームのバージョン番号

    #define _WIN32_IE  (設定値)  // 最低限必要な Internet Explorerのバージョン番号

     

    で、設定可能であるように読めます。

    2008年11月7日 8:59
  •  とっちゃん さんからの引用

    ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

    Breaking ChangesにはWindows 2000を除去したとは書いていませんね。

    http://msdn.microsoft.com/en-us/library/bb531344.aspx

     

     仲澤@失業者 さんからの引用

    http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx

    Windows SDKのターゲットですね。

    多分、Visual C++のターゲットとは大きな差はないとは思いますけれども、念のため。

     

    しかし、このURLのVS.85はいつ変わるんだろうかな。。。(Visual Studio 2008 = VS.90)

    2008年11月7日 13:53
    モデレータ
  • あった。

    http://msdn.microsoft.com/en-us/library/ws0swas0.aspx

    によると、

    2000、XP、2003とVistaがサポート対象となってますね。MFCやATLは調査してませんが、少なくとも2000はまだ見捨てられてはいない。。。というところですね。

     

    2008年11月9日 7:15
  • Azuleanさん

    動かなかったコンピュータ(Virtual PCですが)の WINDIR\WinSxS\Policies を今見てみると、MFC,ATLなどの名が付いたそれらしきフォルダがありませんでした。Vc9がインストールされているコンピュータにはそれっぽいもの(.policyファイルとか)存在しているんですが。

    これが無かったから、動作しなかったんでしょうか。。

     

    既に_BIND_TO_CURRENT_VCLIBS_VERSIONをつけることで問題は解決しており、インストーラを戻して管理ツールを確かめる作業はちょっと時間が取れないかもしれません。

    でも、次同様の起きた場合の手がかりになりそうです。ありがとうございました。

    2008年12月2日 6:05

すべての返信

  •  runta さんからの引用

    ここで質問です。

    ・これまでと同じように、同一フォルダに必要なdllがあればそれを読み込むような設定を行うことは可能でしょうか?

    Private Assemblyとして配置すれば可能です。

     

    http://msdn.microsoft.com/ja-jp/library/ms235531.aspx

    http://msdn.microsoft.com/en-us/library/aa375674(VS.85).aspx

     

    今回の解決方法としてはマージモジュールをインストーラに組み込むか、Private Assemblyとして適切に配置するかでしょうか。

     

     runta さんからの引用

    また、共通の場所に置くファイルも、バージョンまで一緒でないと正しく起動しません。

    例) x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375

    上記フォルダ名の "9.0.21022.8" の部分。

    ここが、実行プログラムをコンパイルする時にできるマニフェストにversionに書かれているものと共通でないとダメみたいです。

    Side by Sideの導入契機が、同じ名前のDLLなのにバージョンが違う、バージョンが違うことによって動作が違う、インストーラでバージョンを確認せずに古いバージョンを上書きしてしまうと言ったトラブルがあったことが理由の一つになっています。

    ですので、バージョンの一致が求められるのは必然です。

     

    このあたりは「DLL Hell」や「Side by Side」(サイド バイ サイド)などで検索してみて下さい。

     

     runta さんからの引用

    ・マニフェストを書き換えることで参照するバージョンを変更させることは可能でしょうか?或いは、どのバージョンでも参照できるようなmanifestの記述は可能なのでしょうか?

    先にも書きましたが、新しいバージョンが必要なのに古いバージョンを参照すると、何が起きるか分かりません。

    少なくともランタイムについては、どのバージョンであっても良いなんてことは言えません。

    従って、適切なバージョンを要求するように書くことがアプリケーションmanifestに求められています。

     

     

    ※参考

    ライブラリ作成者側は特定のバージョンが要求されたときに、別のバージョンにリダイレクトするといった発行者ポリシーも設定できるため、アプリケーションが古いバージョンを要求しているときは新しいバージョンを読むように指示することができます。

     

    http://msdn.microsoft.com/en-us/library/aa375682.aspx

    2008年11月4日 14:21
    モデレータ
  • 補足で。

     

    現状のランタイムのインストールは

    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2

    http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=ja

    等からインストーラをダウンロードして、インストールする事が可能です。

     

     

    2008年11月5日 0:26
  • Azuleanさん、FC-Shiroさん、回答ありがとうございます。

     

    お二人のご意見を参考に、マージモジュールをインストールする形を取ろうかと思います。

     

    が、ここでまた疑問です。サイドバイサイドの考え方はwinXPからのようですが、win2000マシンにインストールする場合、同じようにマージモジュールでのインストールを行っても問題ないのでしょうか?

    それとも、インストーラがOSが何であるか検知し、XP以降ならマージモジュールのインストール、2000ならこれまでと同じようなインストール(でいいのでしょうか?)を行うようなハンドリングが必要なのでしょうか?

    もしかすると、vc2008でコンパイルされたプログラムはwin2000での実行を保証していないとか、あったりしますでしょうか。。

    # 実際にwin2000上で試せばいいのですが、すぐ試せる環境にないため申し訳ありませんが、質問させていただいています。

     

    以上です。よろしくお願いします。

     

     

     

     

     

    2008年11月6日 8:08
  •  runta さんからの引用

    それとも、インストーラがOSが何であるか検知し、XP以降ならマージモジュールのインストール、2000ならこれまでと同じようなインストール(でいいのでしょうか?)を行うようなハンドリングが必要なのでしょうか?

    そのままでうまくいってくれる…はず。

    試していません。

     

     runta さんからの引用

    もしかすると、vc2008でコンパイルされたプログラムはwin2000での実行を保証していないとか、あったりしますでしょうか。。

    コンパイラレベルではWindows 2000は対応となっています。

    但し、MFCの追加クラスやセキュリティが強化されたランタイム関数等、一部の要素でWindows 2000のサポートがないものがあります。

    そのあたりはドキュメントをきちんとご確認ください。

     

    例:

    http://msdn.microsoft.com/ja-jp/library/sxtz2fa8(VS.80).aspx (Windows 2000に対応していない関数)

     

     runta さんからの引用

    # 実際にwin2000上で試せばいいのですが、すぐ試せる環境にないため申し訳ありませんが、質問させていただいています。

    不安なのであれば、すぐにでもWindows 2000のテスト環境を構築してください。

    先のインストーラの問題も最初の段階である程度検証しておかないと、開発終盤に「やっぱりVC2008だめだったよ」じゃ、取り返しがつきませんから。

    2008年11月6日 14:20
    モデレータ
  • ここのところ、フォーラム覗けてなかったんで見落としてたぁ。。。

     

    んと、C/C++ランタイムのマージモジュール自体は、Win2000 以降の環境で適切な形でインストールされるように作られています。というか。。。9x まで考慮された記述になってますねぇ。。。ちゃんとテスト通ってんだろうな。。。不安になるぞ。。。orz

     

    ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

     

    2008年11月7日 5:07
  • >ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

     

    コンシューマーズOSでなければ、「実行モジュール単体」ならばという条件で

    下記の記述によると

     

    http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx

     

    #define WINVER  (設定値)         // 最小限必要なプラットフォームのバージョン番号

    #define _WIN32_WINNT  (設定値)  // 同じく、最小限必要なプラットフォームのバージョン番号

    #define _WIN32_IE  (設定値)  // 最低限必要な Internet Explorerのバージョン番号

     

    で、設定可能であるように読めます。

    2008年11月7日 8:59
  •  とっちゃん さんからの引用

    ところで、VS2008って、Native C/C++ なら 2000 も対応なんですかね?ちゃんと調べてないんですが、XP(SP2)以降じゃないんでしたっけ?

    Breaking ChangesにはWindows 2000を除去したとは書いていませんね。

    http://msdn.microsoft.com/en-us/library/bb531344.aspx

     

     仲澤@失業者 さんからの引用

    http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx

    Windows SDKのターゲットですね。

    多分、Visual C++のターゲットとは大きな差はないとは思いますけれども、念のため。

     

    しかし、このURLのVS.85はいつ変わるんだろうかな。。。(Visual Studio 2008 = VS.90)

    2008年11月7日 13:53
    モデレータ
  • あった。

    http://msdn.microsoft.com/en-us/library/ws0swas0.aspx

    によると、

    2000、XP、2003とVistaがサポート対象となってますね。MFCやATLは調査してませんが、少なくとも2000はまだ見捨てられてはいない。。。というところですね。

     

    2008年11月9日 7:15
  • 皆様、回答ありがとうございました。

     

    まだ環境を構築できておらず、実際に確かめられていないのですが、

    win2000でもマージモジュールのインストールで対応できるようですね。

     

    ###

    別の話になりますが、ビルド時に_BIND_TO_CURRENT_VCLIBS_VERSION を明示的に指定しないと、

    vc2008 SP1がインストールされていてもSPなしのバージョンを要求するプログラムになってしまい

    (manifestが古いバージョンで指定されている)、インストーラでSP1のマージモジュールを入れても

    配置先コンピュータで動かない、となっているっぽいです。。

     

    ありがとうございました。

    2008年11月10日 1:56
  •  runta さんからの引用

    別の話になりますが、ビルド時に_BIND_TO_CURRENT_VCLIBS_VERSION を明示的に指定しないと、

    vc2008 SP1がインストールされていてもSPなしのバージョンを要求するプログラムになってしまい

    (manifestが古いバージョンで指定されている)、インストーラでSP1のマージモジュールを入れても

    配置先コンピュータで動かない、となっているっぽいです。。

    これですね。

    http://msdn.microsoft.com/ja-jp/library/cc664727.aspx

     

    # 私も知りませんでした。知る機会を頂き、ありがとうございました。

    2008年11月10日 14:13
    モデレータ
  • こんにちは、フォーラムオペレータ大久保です。

     

    おおお、皆様たくさんのアドバイスありがとうございます。感動的です。

    runta さん、動作確認できましたら、ぜひご一報いただければと思います。おまちしてます!

     

    ひとまずですが、情報をお寄せくださった皆様の投稿に「回答済み」チェックをつけさせていただきました。

    皆様、ありがとうございました!

    2008年11月20日 5:26
  • #define _BIND_TO_CURRENT_VCLIBS_VERSION   1

    しない時は,

    RTM版が使われるという意味ではなく,

    WinSxSにあるものの内の最新のものにリダイレクトされるだけで,

    (古いものになったり新しいものになったりするだけで)

    必ずしも動かなくなるわけではないです。

     

    SxSアセンブリでは,

    マニフェストが指すものと実行環境で使われるものとが

    必ずしも一致するわけではないです。

     

    ゆるい結びつきがデフォルトになっているのは

    Windows Update での脆弱性の対処をし易くするためなんでしょう。

     

    メモのところは新機能を使っている場合は

    そのバージョンが必要という話です。

     

     

    2008年11月21日 8:53
  •  yayadon さんからの引用

    SxSアセンブリでは,

    マニフェストが指すものと実行環境で使われるものとが

    必ずしも一致するわけではないです。

    発行者ポリシーの存在を忘れてた。。。

     

    http://msdn.microsoft.com/en-us/library/aa375682.aspx

    2008年11月21日 14:14
    モデレータ
  • 久しぶりにふと来てみたら、書き込みが続いていてびっくりです。

    あの後無事動作は確認できていたのですが、ちょっと気になるので再質問させていただきたいと思います。

    # もう誰も来ないかな。。

     

    _BIND_TO_CURRENT_VCLIBS_VERSION についでですが、

    こちらのプログラムは、指定しない場合、正しいバージョンのSxSがないと動作しませんでした。

    yayadonさんによるとデフォルトはそんなことはないようなのですが、何か知らないうちに"ゆるい結びつき"をきつくしてしまっているのでしょうか。

    ちなみに。。

    ・VC9 SP1特有の関数を使用しているわけではありません

    ・exe,dllには、デフォルトで作成されるマニフェストファイル(以下)をmt.exeを利用して埋め込んでいます

     

    このマニフェストファイル(の内容)が原因なのでしょうか。

    また、Azuleanさんの言及されている"発行者ポリシー"とは、マニフェストファイルとは異なる概念なのでしょうか?

     

    よろしくお願いします。念のため、埋め込んでいるマニフェストの内容を以下に示します。

     

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urnTongue Tiedchemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <trustInfo xmlns="urnTongue Tiedchemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level='asInvoker' uiAccess='false' />
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.30729.1' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.DebugMFC' version='9.0.30729.1' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>

    2008年11月28日 10:23
  •  runta さんからの引用

    また、Azuleanさんの言及されている"発行者ポリシー"とは、マニフェストファイルとは異なる概念なのでしょうか?

    アセンブリのマニフェストに付帯的につけられるものと言えるものでしょうか。

    そのアセンブリ(ライブラリ)の作者が、あるバージョンから別のバージョンまでのアセンブリが要求されたときに、特定のバージョンを読み出すようにと指定することができたりします。

     

    VCのSP1のランタイムには新しいバージョンを優先的に読み込むように指定するポリシーファイルがついているため、_BIND_TO_CURRENT_VCLIBS_VERSIONを定義せずに古いバージョン(RTM)を要求しても、自動的にSP1にリダイレクトされるということで、どちらかのバージョンのランタイムがインストールされていればOKということになります。

     

     

     runta さんからの引用

    よろしくお願いします。念のため、埋め込んでいるマニフェストの内容を以下に示します。

    (略)

          <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.30729.1' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />

    デバッグ(Debug)ビルドは再頒布(配布)目的に使用してはいけません。

    再頒布される際は、必ずリリース(Release)ビルドでビルドし、それでインストール等のテストを行うべきです。

     

    確認していませんが、デバッグ版のCRT(DebugCRT)は発行者ポリシーでのリダイレクトは設定されていないかもしれません。

     

     

     

    蛇足です。

     runta さんからの引用

    正しいバージョンのSxSがないと動作しませんでした。

    この一行に置いては、「SxS」ではなく、「アセンブリ」が妥当だと思います。

    SxS = Side by Sideはあくまで仕組みであり、何らかの対象物というわけではなさそうなので。

    2008年11月28日 14:17
    モデレータ
  •  

    Azuleanさん

    すいません、誤ってDebug版のmanifestを貼り付けてしまいました。インストールは、Release版を使用しています。

     

    発行者ポリシーは、manifest内に書き込まれるもので、VC9 でデフォルトで作成されるmanifestは、MFCは新しいバージョンの"アセンブリ"を読み込むようになっているはずってことでいいのでしょうか。

     

    しかし、当初VC9 SPなしバージョンのアセンブリが記載されたmanifestを埋め込ませたexe,dllをインストールしたのですが、配布先コンピュータにSP1相当のアセンブリしかないと起動しなかった(アプリケーションを構成エラー..云々のエラーメッセージが出る)ので、てっきり_BIND_TO_CURRENT_VCLIBS_VERSIONは必須と思っていたのですが。。。

     

    2008年11月29日 11:50
  •  runta さんからの引用

    発行者ポリシーは、manifest内に書き込まれるもので、VC9 でデフォルトで作成されるmanifestは、MFCは新しいバージョンの"アセンブリ"を読み込むようになっているはずってことでいいのでしょうか。

    VCのランタイムの”発行者”はMicrosoftです。

    ですので、VCでruntaさんが作ったアプリケーションにくっついてくるmanifestには含まれません。

     

    manifestの定義に基づいて読み込むランタイムを検索するときに参照する情報となります。

    (XPなんかだと C:\Windows\WinSxS\Policies あたりに格納される)

     

    ※理屈で話をしていますので、動作確認をしたわけではありません。ご了承下さい。

     

     runta さんからの引用

    しかし、当初VC9 SPなしバージョンのアセンブリが記載されたmanifestを埋め込ませたexe,dllをインストールしたのですが、配布先コンピュータにSP1相当のアセンブリしかないと起動しなかった(アプリケーションを構成エラー..云々のエラーメッセージが出る)ので、てっきり_BIND_TO_CURRENT_VCLIBS_VERSIONは必須と思っていたのですが。。。

    XPでの話になりますが、構成エラーが出た場合は、コンピュータの管理ツールを起動していただいて、システムツール、イベントビューアのアプリケーションあたりに、ソースがSideBySideでイベントが登録されます。

    2~3件まとめて登録されていますが、どのアセンブリが見つからなかったか表示されると思います。

    そこから、何か情報を得られませんか?

     

    2008年11月29日 14:27
    モデレータ
  • Azuleanさん

    動かなかったコンピュータ(Virtual PCですが)の WINDIR\WinSxS\Policies を今見てみると、MFC,ATLなどの名が付いたそれらしきフォルダがありませんでした。Vc9がインストールされているコンピュータにはそれっぽいもの(.policyファイルとか)存在しているんですが。

    これが無かったから、動作しなかったんでしょうか。。

     

    既に_BIND_TO_CURRENT_VCLIBS_VERSIONをつけることで問題は解決しており、インストーラを戻して管理ツールを確かめる作業はちょっと時間が取れないかもしれません。

    でも、次同様の起きた場合の手がかりになりそうです。ありがとうございました。

    2008年12月2日 6:05
  • まさかデバッグビルドを配布している?

    2008年12月2日 6:59
  • runta さんこんにちは。

     

    このスレッドに返信をくれた方は、おそらく runta さんの書き込みに気づいてくださると思いますよ。(私は気付きましたし)

    必要でしたら、回答済みチェックをはずしていただいてもかまいません。

    (「未回答」の一覧に載りますので、少しですが気づいてもらえる率があがるかもです)

     

    チェックはついたままでも、C++ フォーラム内での一覧内ではちゃんと上位に上がってきていますので、みなさん見てくださると思います 

     

    2008年12月2日 7:37