VCRedist_x86.exeを使用しないVisual C ++再頒布可能パッケージ
-
05-07-2019 - |
質問
私は厳しい制約のある環境で開発を行っていますが、開発者も厳しく管理しています。
VCRedist_x86.exe-4Mbの再配布可能ファイル-面白くない(転送に4時間)。私は本当にMFC90.dll、msvcm90.dll、msvcp90.dll、msvcr90.dllを再配布することを好む-それは2Mbのようなものだ。ただし、 Visual C ++ファイルの再配布には次のように記載されています。
マニフェストなしでビルドされたC / C ++アプリケーションの再配布はサポートされていません。 Visual C ++ライブラリは、アプリケーションをこれらのライブラリにバインドするマニフェストがない限り、C / C ++アプリケーションで使用できません。詳細については、展開方法の選択を参照してください。
DLLをプログラムの作業ディレクトリにコピーするという当初の計画は、 マニフェストのこの勇敢な新しい世界で働きます。
次の推測は、ファイルをWinSxSディレクトリに追加するのに必要なレジストリエントリを整理し、(4 megプログラムを使用するのではなく)自分で作成することです。
[edit]ソフトウェアは頻繁に更新されるため、静的リンクよりもDLLを強くお勧めします。 [/編集]
必要なファイルを正常に配布し、オーバーヘッドを抑えるにはどうすればよいですか
解決
これを使用します: Howto:vcredist_x86.exeをインストールせずにVC2008アプリを展開する
本質的に
- exeファイルにマニフェストを埋め込まないでください。
- C ++ DLLとそれらのマニフェストをアプリのディレクトリにコピーします。
- 「publicKeyToken」を削除します;すべてのマニフェスト(あなたとマイクロソフトのもの)から。
- 必要に応じて、アプリのマニフェストファイルのバージョン情報をMicrosoftマニフェストファイルと一致するように変更します(またはその逆)
他のヒント
[私は現在マイクロソフトのSxSメンテナーです]
マニフェストからpublicKeyToken属性を削除することを反対することを強くお勧めします。この属性をそのままにしておくと、dllのプライベート展開が正常に機能します。 ただし、それを削除すると、依存関係が一致しなくなるため、ターゲットマシンに新しいバージョンのCRTが集中的にインストールされている場合、アプリがセキュリティアップデートの恩恵を受けられなくなります。
つまり、要約すると、デフォルトでマニフェストを埋め込むのは安全です。編集せずに、CRTマニフェスト+ DLLファイルを実行可能ファイルのディレクトリに直接コピーします。それでおしまい。互換性のあるWin2k +。
「ランタイムライブラリ」に/ MT(マルチスレッド)を指定します。コンパイラのプロパティページで設定します。これはランタイムライブラリに静的にリンクするため、再配布可能ファイルをインストールする必要はありません。
プライベートアセンブリとしてインストールします。こちらをご覧ください:
http://msdn.microsoft.com/en-us/library /ms235291.aspx
提供されたDLLのすべてが必要でない場合は、必要なものだけを参照するようにマニフェストファイルを変更できます。