缘起

最近在调试网络通信,每次一有点小修改,都要将程序从开发机复制到测试机,不胜烦扰。既然我们程序猿,为什么要那么死板呢,能够用代码解决的问题,就不要用手去解决。

解决过程

复制

手工复制外有没有其他办法了?这个时候大家一定会想到批处理。在命令提示符下面,我们用于管理文件和文件夹的命令比较多,比如RENAME、DEL、COPY用于文件,MKDIR、RMDIR、XCOPY用于目录。

如果查看常用的命令,可以通过在命令提示符中输入Help进行查看,如下图:

我们需要复制整个目录,所以使用XCOPY命令(如果只复制单个文件,也可以用COPY),XCOPY的常用参数如下:

我们需要的是到远程机器上,但是命令是在本机上操作。我们可以把远程机器的目录共享,就像操作本机磁盘一样,那么这些命令也是适用的。

共享

共享的步骤如下(熟悉的可直接跳过,以Win7系统为例):

  1. 在待共享的文件夹,在右键上单击属性,切换到共享选项卡
  2. 单击共享按钮,在弹出的文件共享对话框中添加用户(添加用户需要在文本框中单击三角形按钮选择用户)
  3. 设置权限(因为我们要复制文件所以选择读取/写入)

    在图中,我选择的是EveryOne,所有用户。出于安全考虑,不建议这样做
  4. 在浏览器中输入我们共享的文件夹地址,输入用户名密码,这样就可以在命令提示符中直接使用命令复制了(如果关闭了密码保护密码共享,可省略这一步,但是Windows中默认是打开的,关闭是在控制面板->网络和共享中心->更改高级共享设置中)

好了,我们现在知道如何通过命令复制文件夹到远程计算机上了,但是不会每次都通过命令复制吧,这样还不如直接手动复制了。当然不会了,我们的VS不是别人称为宇宙最强IDE么,当然考虑到这一点了,就是生成事件了。

生成事件

生成事件包括生成前事件和生成后事件,分别是在编译开始之前和编译完成之后进行的自定义处理。

在C++项目中,生成事件在项目的属性页中设置

在C#中,也在项目的属性页中设置

我们可以编辑生成事件,VS在其中定义了许多宏(C++中更多),如项目名称、生成平台、输出目录等。下面仅以C#为例简单说明:

单击编辑后期生成事件,在弹出的窗口中单击宏按钮,在宏列表中单击相应的宏名称,即可插入宏变量到编辑框中,组合宏变量和常见的命令,即可实现很丰富的功能,如上面的拷贝文件到远程计算机。除了使用命令,我们还可以调用批处理,如上图所示,在批处理前面加上call。注意:批处理的当前目录是指工程的输出目录(即在生成中设置的输出目录,默认即bin\Debug或者bin\Release)

远程关进程

上面一切看起来工作的很好。但是,有时候我调试发现了Bug,直接在开发机上运行,却报生成失败,原来是生成后事件未成功运行。再一查,是测试机上没有关掉对应的程序。这个问题怎么解决呢?

在命令行下,杀进程可以通过taskkill,那么它能不能杀远程进程呢?查看帮助。如下图:

可以看出taskkill可以连接远程系统、指定用户名、指定密码、指定进程的映像名(一般就是进程的执行文件名,如XX.exe)。

于是测试:

尼玛,怎么跟想象的不一样。问题出在哪里?

RPC服务器不可用的解决办法

这个问题我没思路,但是我没思路,别人不一定没有啊。上网一查一对,原来问题出在防火墙上,关了防火墙(根据网络类型选择相应的防火墙)在测试机上检验,果然可以使用了。

当然,在实际使用中,关掉防火墙是不安全的做法,可以进行如下操作。

  1. 依次选择控制面板->Windows防火墙->高级设置
  2. 在高级安全Windows防火墙中选择入站规则
  3. 找到远程计划任务管理(RPC),配置文件为专用、公用,启用规则。

最新文章

  1. vtk保存图像
  2. [js开源组件开发]图片放大镜
  3. HDU2018递推牛
  4. Eclipse的常用快捷方式
  5. POJ3283+字典树
  6. [转载]网络编辑必知常识:什么是PV、UV和PR值 zz
  7. vim 插件
  8. [置顶] android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
  9. C语言生产随机数的方法
  10. hdu 5428 The Factor(数学)
  11. iphone在iframe页面的宽度不受父页面影响,避免撑开页面
  12. 记一次较坑的eclipse安装AmaterasUML插件经历
  13. javascript事件委托的原理与实现
  14. SQL Server异常汇总
  15. SQL 行转列示例
  16. vue返回上一页面如果没有上一页面返回首页
  17. mysql 获取当月日期天数
  18. WebSocket 客户端实例
  19. onvif 开发中的一些重要函数介绍
  20. Unity3d使用json与javaserver通信

热门文章

  1. Selenium爬取元素下子元素方法
  2. 2个list取交集
  3. P2300 合并神犇
  4. 23.each和map函数
  5. 2018年10月19 手记 - 身为开发者的我de窘境
  6. 3.2、Factorization Machine实践
  7. 阿里云Centos下安装nginx之后外网无法访问
  8. yum的repo文件详解、以及epel简介、yum源的更换
  9. native excel 文件已经打开的判断
  10. linux新增特性timerfd