在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.这是可以接受的
让我修改一下我的答案:
你有几个选择:
1)安装VC++ 2008运行时.您可以下载并安装它们.它们的合并模块也可用.
2)静态链接运行时(/ MT或C/C++ - >代码生成 - >运行时库:多线程).这将增加可执行文件的大小,但它不依赖于任何Dll.如果您担心大小,请仅使用C标准库或仅直接使用Windows API.
3)使用旧版本的VC++.2005及更早版本不需要安装运行时.Dll可以放在与可执行文件相同的目录中.如果使用VC++ 6.0,则运行时将安装在所有版本的Windows上,否则您需要自己安装.
更全面的选项列表:
重写应用程序,以便根本不使用C/C++.
切换到Visual Studio 6或基于mingw的工具集,如Code :: Blocks - 这些工具使用已经分布的msvcrt.dll作为其运行时.
使用/ MT开关构建.这将在exe中构建必要的运行时函数.哪个会膨胀它.但是,这种膨胀(坦率地说)比加载单独的dll更少开销.
将VS9运行时分发为"私有sxs"安装.这需要将内容复制C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
到与应用程序的exe相同的文件夹中.如果您已应用SP1,则此文件夹将包含SP1运行时,但您的应用程序将要求RTM运行时(如图所示).添加_BIND_TO_CURRENT_CRT_VERSION
到您的项目定义,重建和应该排序自己.
显然可以为VS9获取vc_redist.exe.找到或计算实际将上述程序集(作为Microsoft.VC90.CRT的内容)安装到共享sxs存储中所需的MSI或安装程序mojo.