最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸起袖子就是干,问了下中软其他项目组搞自动化的同事他们组用的是python来做自动化部署,自己也上网也搜了下一些开源的框架,以及自动化部署工作流程,也大致了解了下现在项目的工作流程。现在的项目大致的流程是部署一个ftp服务器用来放置要部署的文件,然后客户端通过ssh登录到ftp服务器,将文件下载到客户端,然后执行cmd命令部署应用。主要涉及了3大知识点:1.C++实现ftp登录 2.C++从ftp服务器下载文件或文件夹 3.执行cmd命令实现部署。

这两天大致的把流程、代码浏览了一下,在看代码的过程中发现大学学的算是皮毛吧。与实战的还是有不一样的地方。也可能是自己没学那么精通。

一、C++中main和_tmain

刚看项目的时候不知道从哪看,想着那就从main函数开始吧,可main函数就是没找到,不过找到了一个有点类似的_tmain函数。自己百度了下才发现_tmain()与main()是一样的,_tmain()是为了支持unicode所使用的main一个别名,既然是别名,应该有宏定义过的,在头文件<tchar.h>中可以找到_tmain的宏定#define _tmain      main,所以,经过预编译以后, _tmain就变成main了。

二、在_tmain()函数中的argc和argv[]

当我调试程序的时候一直纳闷远程ftp服务的ip地址、用户名、密码、文件路径是怎么加载的,我开始以为是在数据库中,还使用vs打开了sdf类型的数据库,把数据库中的几个表的数据找了个遍然并卵,没有与这些数据沾边的数据,当我右击项目—>属性乱点时找到了相对应的数据,原来在属性—>配置属性—>调试—>命令参数中。自己又上网找了下,原来argc:argument count,表示传入main函数的参数个数,argv 是 argument vector,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个.argv是指向指针的指针,main函数的第二个参数“char *argv[]“也可以替换为 “char **argv“.

而传参数给main函数有两种方法,第一种方式是在编译环境中设置,右击项目—>属性—>配置属性—>调试—>命令参数,在命令参数中输入,每个参数之间用空格隔开。第二种方式就是使用cmd命令窗体,类似之前在集群redis时使用cmd命令来启动一样传入参数。

三、远程批量部署

今天查了一下开源的自动化部署,向罗工推荐ansible时,罗工要求部署服务器不能依赖其他的,但ansible部署时对window服务器是有限制的,具体可以参考http://www.cnblogs.com/kingleft/p/6391652.html。所以还是只能用AutoDeploy。今天看代码了解了下大致的思路,原来是通过wmi远程控制服务器安装部署应用。wmi这个也是我第一次听到,今天算是涨了姿势。使用wmi可以远程登录、文件拷贝、建立进程、启动服务.可以参考http://blog.csdn.net/iamherego/article/details/11573553。

参考:http://www.cnblogs.com/XiaoJie85/articles/2128111.html

C++基础知识小记的更多相关文章

  1. EF基础知识小记四(数据库=>模型设计器)

    EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...

  2. Linq基础知识小记四之操作EF

    1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...

  3. EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)

    一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...

  4. web基础知识小记

  5. EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分的实体)

    日常开发中,经常会碰到一些自引用的实体,比如系统菜单.目录实体,这类实体往往自己引用自己,所以我们必须学会使用Code First来建立这一类的模型. 以下是自引用表的数据库关系图: ok,下面开始介 ...

  6. EF基础知识小记五(一对多、多对多处理)

    本文主要讲EF一对多关系和多对多关系的建立 一.模型设计器 1.一对多关系 右键设计器新增关联 导航属性和外键属性可修改 2.多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生 ...

  7. EF基础知识小记三(设计器=>数据库)

    本文主要介绍通过EF的设计器来同步数据库和对应的实体类.并使用生成的实体上下文,来进行简单的增删查该操作 1.通过EF设计器创建一个简单模型 (1).右键目标项目添加新建项 (2).选择ADO.Net ...

  8. EF基础知识小记二

    1.EF的常用使用场景 (1).维护一个已经存在的数据库,VS提供了工具帮助我们把数据库中的表和视图等对象导入到实体框架.        [数据库=>模型(Database First)] (2 ...

  9. EF基础知识小记一

    1.EF等ORM解决方案出现的原因 因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一 ...

随机推荐

  1. 重写comparater比较器

    TreeSet 能自动对对象进行排序,但是一般需要在类中重写比较方法 比较器介绍 在类中实现Comparable接口,并重写compareTo方法 排序对象类 package typing.overr ...

  2. 第一次使用zxxbox弹层经历

    一:首先这个插件是基于JQuery的插件,要先导入JQuery,然后再导入这个插件 二:HTML部分 <a href="http://www.jisuapi.com/static/im ...

  3. drf8 解析器

    解析器的介绍 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Accept与ContentType请求头. Accept是告诉 ...

  4. Linux运维40道精华题

    题目 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控 ...

  5. docker安装redis 指定配置文件且设置了密码

    ---------首先,所有docker的命令,都可以用 docker help 来查询,这个挺好的,我反正记不住辣么多命令呀.   1.直接pull 官方镜像吧.没啥说的,这样方便省事.如果你非要用 ...

  6. 可在广域网部署运行的即时通讯系统 -- GGTalk总览(附源码下载)

      (最新版本:V6.2,2019.01.03 .Xamarin移动端版本已经推出,包括 Android 和 iOS) GGTalk开源即时通讯系统(简称GG)是QQ的高仿版,同时支持局域网和广域网, ...

  7. grid布局学习二之子元素(项目)

    /* grid-column-start属性:左边框所在的垂直网格线 grid-column-end属性:右边框所在的垂直网格线 grid-row-start属性:上边框所在的水平网格线 grid-r ...

  8. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  9. 机器学习与Tensorflow(7)——tf.train.Saver()、inception-v3的应用

    1. tf.train.Saver() tf.train.Saver()是一个类,提供了变量.模型(也称图Graph)的保存和恢复模型方法. TensorFlow是通过构造Graph的方式进行深度学习 ...

  10. 用Eclipse导入Maven工程

     步骤一 : 选择 “Import”操作 有两个途径可以选择 “Import”操作; 1>“File”--> "Import..." 2> 在 "Pro ...