2011-12-06 14 views
2

ビジュアルスタジオ2008および再配布可能パッケージx64, がないマシン(64bit)を考えてみましょう。64bitアプリケーション(ビジュアルスタジオ2008 sp1で構築)をそのマシンで実行するには、再配布可能パッケージが必要ですか?Visual Studio 64ビットアプリケーションを実行するには、再頒布可能パッケージx64が必要ですか?

Visual Studio 2008を使用しているマシン(64ビット)が再配布可能なパッケージx64, を持っていないとします。2. Visual Studio 2008 sp1によって構築された64ビットアプリケーションをそのマシンで実行するには、 ?

再配布可能パッケージx64と64ビットアプリケーションの関係は何ですか?

答えて

1

多くの場合、プログラムを静的にCランタイムライブラリにリンクすることができます。この場合、必要なすべての関数がアプリケーションの実行可能ファイルにコピーされるため、再配布可能なパッケージは必要ありません。ただし、動的にリンクする場合は、アプリケーションとともに再配布可能パッケージを配布する必要があります。他の多くのアプリケーションでも同様に実行されますが、必要なランタイムがターゲットシステムで使用できるという保証はありません。

プロジェクトの設定ダイアログで、 "C/C++>コード生成>ランタイムライブラリ"で、ランタイムとリンクする方法を変更できます。

次のMSDNの記事は、あなたが必要なVC++ファイルを再配布方法について説明します。http://msdn.microsoft.com/en-us/library/ms235299%28v=vs.80%29.aspx

+0

ありがとうございました... – Raj

2

まずオフ、この要件は、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のデバッグバージョンは配布可能ではありません。

+0

簡単な説明をありがとうございます。ありがとう:) – Raj

関連する問題