一个项目心得记录
1. 项目背景(1) 公司的要求从FTP上,下载文件,然后从文件里读取值,读取之后,写入数据库。这个文件里有很多项数据,读取是其中一项。(2) 开发以及运行环境,如下表1.1所示。 表 1.1 开发及运行环境开发环境Win10 ,64位编码IDEVisual Studio 2013
1. 项目背景
(1) 公司的要求从FTP上,下载文件,然后从文件里读取值,读取之后,写入数据库。这个文件里有很多项数据,读取是其中一项。
(2) 开发以及运行环境,如下表1.1所示。
表 1.1 开发及运行环境
开发环境 | Win10 ,64位 |
编码IDE | Visual Studio 2013 |
服务器运行环境 | Windows Server 2008 R2企业版,64位 |
数据库 | SQL Server 2008 |
2. 技术选择
(1) 整体框架
使用VS2013,新建控制台程序,采用win32编译,根据之前整理的文档,做成Windows Service服务程序。注意必须勾选支持MFC库。做成Windows Service服务程序的方法,参考我之前整理的文档。
(2) 关键技术点
由于之前的代码里面,有很多类似的地方,所以很多时候要参考之前的成果。
对于FTP下载,本次选用了MFC自带的wininet库。方便好用。以后根据情况,也可以考虑使用curl的方式进行下载。
写入数据库,本次采用了ADO库,对数据库进行操作。
对于ini配置文件的读写,也采用微软自带的库进行。
(3) C++的技巧运用
充分利用STL的特点,利用好容器如vector,map等等,大大提高编码效率。充分利用好继承当中虚函数的多态性的特点,大大减少代码量,逻辑更清晰,实现更容易。以后要更多的使用继承才好。以后要更多的利用好设计模式,争取做出更好的程序。
3. 踩过的坑
(1) 重复发明轮子
在我写FTP下载的时候,第一反应是自己用winsock,重新写一个类,用来下载FTP文件。结果浪费了很多时间,最终还是采用了wininet去做。
很多时候,如果有现成的轮子了,就不要自己强行弄了。下班时间自己玩还可以。
(2) 搭建Windows Service框架
在接手了老项目的程序之后,发现以前的项目都是运行在Windows Server2008上,并且以windows service服务的方式去运行的。
我天真的以为,那些项目都是用MFC做成的服务。结果浪费了很多时间才发现,那些项目都是“控制台”程序,并且勾选了支持MFC库。正因为在建项目的时候,勾选了支持MFC库,所以看起来很像是隐藏了界面的MFC程序,其实不是的。
所以才有了我后来总结的,搭建windowsservice服务程序的文档。
(3) 强行调试服务程序,导致函数StartServiceCtrlDispatcher()报1063错误
首先强调一点,服务程序的服务入口是不能调试的。如果你强行调试服务入口,那么就会出现StartServiceCtrlDispatcher()报1063错误。
然后,你必须只能通过打日志的方式,去看程序运行的问题。
而必须要强调的是顺序,
<1>首先要用sc命令去注册。
<2>然后必须用sc命令或者windows服务器管理器去启动程序。手动启动或者vs调试都将失败。
<3>启动之后,根据日志去查问题。
这种类型的错误和启动失败,困扰了我好几个小时,必须要打日志才能查出来。
(4) 配置文件的信息要及时更正
在前一天的晚上写好程序之后,今天调试发现总是无法得到结果,后来查了很久发现,自己在做测试的时候,将配置文件的信息改了,但是后来忘记自己改了,结果就出问题了。关键要记得自己修改了哪里,正式使用的时候应该要还原成什么样子。例如ip,如果你改了,下一次肯定连不上了。
4. VS2013程序在Win Server2008上运行方法
以后,如果我们将老项目的代码,放在vs2013上编译,然后放到Win Server2008上面去运行,很可能会出问题。
【解决方案】:双击你的exe文件,找到提示将缺少的库文件,拷贝到exe的同一个目录下即可。本次拷贝了这3个到exe同一个目录里面,然后就没问题了。
========================
更多推荐
所有评论(0)