15

私は厳しい制約のある環境で開発していますが、開発者も厳しく管理しています。

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 メガ プログラムを使用するのではなく) 自分で作成することです。

[編集] ソフトウェアは頻繁に更新されるため、DLL は静的リンクよりも強く推奨されます。[/編集]

必要なファイルを正常に配布しながら、オーバーヘッドを抑えるにはどうすればよいですか?

4

4 に答える 4

27

[私は現在、Microsoft で SxS メンテナーを務めています]

マニフェストから publicKeyToken 属性を削除しないことを強くお勧めします。dll のプライベート展開は、この属性をそのままにしておくと問題なく機能します。ただし、それを削除すると、依存関係が一致しなくなるため、ターゲット コンピューターに一元的にインストールされた新しいバージョンの CRT がある場合に、アプリがセキュリティ更新プログラムの恩恵を受けることができなくなります。

要約すると、デフォルトでマニフェストを埋め込んでも安全です。CRT マニフェスト + DLL ファイルを編集せずに、実行可能ファイルのディレクトリに直接コピーします。それでおしまい。互換性のある Win2k+。

于 2008-11-06T07:24:47.033 に答える
13

これを使用します:方法: vcredist_x86.exe をインストールせずに VC2008 アプリをデプロイする

本質的に

  • マニフェストを exe ファイルに埋め込まないでください。
  • C++ DLL とそのマニフェストをアプリのディレクトリにコピーします。
  • すべてのマニフェスト (あなたのものと Microsoft のもの) から "publicKeyToken" を削除します。
  • 必要に応じて、アプリのマニフェスト ファイルのバージョン情報を Microsoft マニフェスト ファイルと一致するように変更します (またはその逆)。
于 2008-10-07T03:05:39.293 に答える
4

コンパイラのプロパティ ページの「ランタイム ライブラリ」設定に /MT (マルチスレッド) を指定します。これはランタイム ライブラリに対して静的にリンクするため、再配布可能ファイルをインストールする必要はありません。

于 2008-10-07T02:21:38.197 に答える
1

それらをプライベート アセンブリとしてインストールします。ここを参照してください:

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

提供されているすべての DLL が必要ない場合は、必要なものだけを参照するようにマニフェスト ファイルを変更できます。

于 2008-10-07T02:37:27.837 に答える