0

Windowsにインストールすると、ファイルシステムとレジストリ全体にデータが拡散するという特定のグループからの一般的な苦情です。一部のアプリには、ファイルを解凍するだけのオプションが用意されているため、削除するだけで「アンインストール」できます。しかし、どのようにしてVisual C ++ Redist、Side-by-Side(SxS)などの醜いものをすべて回避するのでしょうか。

私は少しユーティリティを持っています、そして本当に私は実行されるただ一つの.EXEを配布したいです-それが小さいのでインストーラーを全くまたは解凍さえしません。これは実行可能ですか?

編集: 提案されたように、実行時に静的な依存関係(/MDではなく/MT)を使用してビルドしてみました。私は次のものを手に入れました(明確にするために中央部分は切り捨てられています):

1>Linking...
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __mbschr already defined in LIBCMT.lib(mbschr.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __strdup already defined in LIBCMT.lib(strdup.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _abort already defined in LIBCMT.lib(abort.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __stricmp already defined in LIBCMT.lib(stricmp.obj)
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _setlocale already defined in LIBCMT.lib(setlocal.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
4

1 に答える 1

1

プロジェクトの[プロパティ]ページ->[構成プロパティ]->[C/ C ++]-> [コード生成]でVCランタイムに静的にリンクし、[ランタイムライブラリ]を[非dll]オプションに設定すると、単一のEXEを配布できます。

ターゲットオーディエンスによっては、企業環境で.exeファイルのダウンロードがブロックされることがあるため、.exeとして配布すると問題が発生する可能性があるため、.zipファイルも提供することをお勧めします。

于 2011-05-17T13:08:02.653 に答える