在Visual Studio 2008中编写了CGI应用程序并在本地对其进行了删除后,我将其上传到Windows Server 2003操作系统,并立即无法运行。
我猜我需要安装可怜的Runtime distributable,但在阅读之后:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
我想知道忽略这种并排的东西是否更有意义,只需重新编写应用程序。
我猜Windows Server 2003没有我需要的MSCRVT版本? Windows Server 2003有吗?
在部署胖客户端时,我想用我的应用程序分发所需的dll。 他们假设我只是包含iostream,sstream,string?
如果添加windows.h,它会发生重大变化吗?
添加了:
使用下面推荐的/ MT开关
C / C ++ - >代码生成 - >运行时库 - >多线程(/ MT)
(你可能需要做一个干净的事情:
构建 - >清洁
以避免错误消息
“无法将更新后的清单保存到文件中”)
将我的应用程序从38k增加到573k。这就是我所谓的重要(想象一下,如果这是你的薪水)。由于这个应用程序的许多实例将不断加载和卸载(需要宝贵的内存和处理器资源),我想找到一个更好(更小)的解决方案。
我知道这对于今天的许多情况并不重要,而不是许多开发人员关注的焦点,因此趋势为.NOT和60MB运行时,但这就是我想要做的。
添加了:
删除调试以使项目编译后:
项目 - > Propeties - > c / c ++ - >预处理器 - >预处理器定义(删除DEBUG;)
尺寸减小到300k,它会运行。
添加了: 正如下面Chris Becke所建议的,复制: msvcm90.dll msvcp90.dll MSVCR90.DLL Microsoft.VC90.CRT.manifest 到应用程序的目录将提供所需的所有运行时。
有几次使用Visual Studio 6,但它不支持Vista(或我们假设的Windows 7)其他不需要运行时可分发的解决方案可能是MASM甚至是Basic的风格。不幸的是,这违背了使用像C ++这样的高级OOP语言的目的。
只要我确实需要安装C ++可再发行组件,那么权衡额外是260k。这是可以接受的
答案 0 :(得分:10)
让我修改一下我的答案:
您有几个选择:
1)安装VC ++ 2008运行时。你可以download和安装程序。它们的合并模块也可用。
2)静态链接运行时(/ MT或C / C ++ - >代码生成 - >运行时库:多线程)。这将增加可执行文件的大小,但它不依赖于任何Dll。如果您担心大小,请仅使用C标准库或仅直接使用Windows API。
3)使用旧版VC ++。 2005及更早版本不需要安装运行时。 Dll可以放在与可执行文件相同的目录中。如果您使用VC ++ 6.0,则运行时将安装在所有版本的Windows上,否则您需要自己安装。
答案 1 :(得分:8)
更全面的选项列表:
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
的内容复制到与应用程序的exe相同的文件夹中。如果您已应用SP1,则此文件夹将包含SP1运行时,但您的应用程序将要求RTM运行时(如图所示)。将_BIND_TO_CURRENT_CRT_VERSION
添加到您的项目中定义,重建并且应该自行排序。