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同一个目录里面,然后就没问题了。






========================


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐