0

某些团体普遍抱怨说,在 Windows 上安装会在整个文件系统和注册表中散布东西,并且某些应用程序提供了简单地解压缩文件的选项,因此您可以“卸载”只是删除。但是他们如何避免 Visual C++ Redist、Side-by-Side (SxS) 等所有丑陋的东西呢?

我有一个小实用程序,实际上我更喜欢只分发一个正在运行的 .EXE - 根本没有安装程序,甚至因为它很小,所以甚至解压缩。这可行吗?

编辑: 正如建议的那样,我尝试使用对运行时的静态依赖(/MT 而不是/MD)进行构建。我得到以下内容(为了清楚起见,中间部分被截断):

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

如果您静态链接到 VC 运行时 - 在项目的属性页 -> 配置属性 -> C/C++ -> 代码生成并将“运行时库”设置为“非 dll”选项,则可以分发单个 EXE。

根据您的目标受众,作为 .exe 分发可能会出现问题,因为有时会阻止在公司环境中下载 .exe 文件,因此建议同时提供 .zip 文件。

于 2011-05-17T13:08:02.653 回答