まずオフ、この要件は、32ビットおよび64ビットコードの両方のために存在します。あなたは32ビットコードと他の誰かがあなたの前にインストールしていることでもうちょっと幸運に思えるでしょう。それはVSインストーラによってあなたのdevマシン上にあった。
コンパイラの設定で誘導されます。プロジェクト+プロパティ、C/C++、コード生成、ランタイムライブラリ設定。 VSのすべてのプロジェクトテンプレートは/ MDにこの設定を持っています。/MTに変更することができ、msvcr90.dllのようなランタイムDLLに依存しなくなりました。ランタイムライブラリコードは、ターゲットマシン上に存在するDLLに頼るのではなく、プログラムにリンクされます。
ただし、/ MD設定は安全な設定です。これは、独自のDLLを作成し、C++オブジェクト(std :: stringなど)または呼び出し元によって解放される必要があるポインタを返すコードを記述するときに問題にならないようにします。 DLLとEXEにそれぞれCRTの独自のコピーがリンクされている場合、これはうまく動作しません。彼らは異なるヒープを使用し、ヒープ間のポインタを解放することは適切に機能しません。 XPのサイレントリーク、Vistaのクラッシュ、そしてそれ以上。
再配布可能な.exeは、実際にダウンロード可能なインストーラであり、プログラムのインストーラの作成を忘れるとお客様が使用できるようになっています。はるかに良い解決策は、すべてをコピーして適切にインストールするインストーラを作成することです。それを作るのに1分もかかりません。セットアップと展開+セットアッププロジェクトをソリューションに追加します。右クリックし、[追加]、[プロジェクト出力]をクリックします。プロジェクト+プロパティ、前提条件をチェックし、 "Visual C++ランタイムライブラリ(x64)"チェックボックスをオンにします。独自のインストーラを作成する場合は、C:¥Program Files(x86)¥Common Files¥Mergeモジュールでマージモジュールを使用できます。
ああ、デバッグビルドではなくリリースビルドを展開します。 CRTのデバッグバージョンは配布可能ではありません。
ありがとうございました... – Raj