最近在帮华为接口人研究自动化部署项目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. MongoDB学习记录(一) - 安装、启动与建立数据库

    简要说明一个基本概念:MongoDB中的三要素:数据库(database).集合(collection)和文档(document). 文档:类似于JSON对象,由字段(field)和值(value)组 ...

  2. 【慕课网实战】一、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    课程整套CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 ...

  3. PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

    sscanf – 根据指定格式解析输入的字符 echo – 输出一个或多个字符串 print – 输出字符串 sprintf – 返回格式化字符串 vsprintf – 返回格式化字符串 (参数为数组 ...

  4. MFS故障测试及维护总结

    一.测试环境说明: 10.2.2.230 mfsmaster     VIP:10.2.2.130 10.2.2.231 mfsbackup 10.2.2.253 mfsdata01 10.2.2.2 ...

  5. webapi 自定义缓存实现

    定义一个Filter public class MyOutputCacheAttribute : ActionFilterAttribute { MemoryCacheDefault _cache = ...

  6. 【设计经验】1、Verilog中如何规范的处理inout信号

    在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号).比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号. ...

  7. Android 追加写入文件的三种方法

    一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...

  8. vue-cli脚手架项目按需引入elementUI

    https://www.jianshu.com/p/40da0ba35ac1 Couldn't find preset "es2015" relative to directory ...

  9. 腾讯Alloy团队代码规范

    概述 我个人很看重代码规范,因为代码是写给别人看的,按规范写别人才更容易理解.之前苦于没有代码规范的资料,现在在github上面看到了腾讯Alloy团队的代码规范,于是学习了一下,并记录下我自己还没怎 ...

  10. Java学习笔记52(网络编程:UDP协议案例)

    InetAddress类: 表示互联网中的IP地址,示例: package demo; import java.net.InetAddress; import java.net.UnknownHost ...