团体普遍抱怨在Windows上安装会将内容传播到整个文件系统和注册表中,并且某些应用程序提供了简单地解压缩文件的选项,因此您可以"卸载"只是删除。但是他们如何避免视觉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
链接到 VC 运行时 - 在项目的属性页上 ->配置属性 -> C/C++ ->代码生成,则可以分发单个 EXE,并将"运行时库"设置为"非 dll"选项。
根据您的目标受众,作为.exe分发可能会出现问题,因为.exe文件有时会被阻止在公司环境中下载,因此建议同时提供.zip文件。