WEB开发网
开发学院软件开发C语言 C#利用批处理实现正在运行的程序自动更新 阅读

C#利用批处理实现正在运行的程序自动更新

 2009-02-26 08:18:39 来源:WEB开发网   
核心提示:关于自动更新,在.NET下面已经是很普通的事情,无非就是在服务器端保存配置好要更新的程序,然后客户端再写一个小程序来检测,有更新的则复制过来.就这么个思路,这么个简单的问题还要占一篇首页?但你可别急,看看我的标题,再慢慢的看下去,或许哪一天,你可能还真的会用得着呢,就算用不着,相信对各位回头温习一下久违的Command

关于自动更新,在.NET下面已经是很普通的事情,无非就是在服务器端保存配置好要更新的程序,然后客户端再写一个小程序来检测,有更新的则复制过来.就这么个思路,这么个简单的问题还要占一篇首页?但你可别急,看看我的标题,再慢慢的看下去,或许哪一天,你可能还真的会用得着呢,就算用不着,相信对各位回头温习一下久违的Command也是不错呀!

利用ShareDevelop的ICSharpCode.Core实现了一个插件应用程序,这两天想要弄个自动更新,将更新功能作为插件包括在应用程序中,本来以为按照上面的思路是很容易实现的,也确实实现了部分,为什么说部分呢,因为主Exe文件没有更新成功啦!想想原因其实也很简单:主Exe本身就在运行,在运行阶段的Exe或DLL是没法复盖的.这下子,这可怎么办?这时一个想法冒出,先将主Exe进程杀掉,然后再复制不成吗?咦,好象是道理哦,自杀了之后,自然可以复制过来呀,但是转念又想,如果主Exe自己都不存在,那后面的复制功能怎么才能执行呢?难不成因为不差钱,有钱能使鬼推磨,帮主Exe一把?

这世界当然是没有鬼的,即使有,它也不可能这么厉害的能帮到主Exe的,在座位上脑子里想的总是自杀再重生这个方案.Google,Baidu这些大神祭起半天也没有找到好的解决方案,只好退下来.看来只有靠自己自力更生,当然这个不一定行得通,但至少尝试过了……

不就是复制嘛?就是copy呀,百无头绪当中,我在cmd中(我一般是会开着cmd的), 无意识的敲着copy/?,xcopy/?之类的查看,其中xcopy的帮助还真是提醒了我,请看下面:(繁体系统,粘贴过来的,所以没有转换成简体)

XCopyHelp
C: >xcopy /?
复制档案和树状目录.

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/i] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/u]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]rr
                           [/EXCLUDE:file1[+file2][+file3]]

  source       指定要复制的档案.
  destination  指定位置或者/以及新档案的名称.
  /A           只复制设定成保存属性的档案,不要改变属性的设定.
  /M           只复制设定成保存属性的档案,并清除保存属性.
  /D:m-d-y     复制在指定日期当天或之後发生变更的档案.如果没有给日期,
               只复制那些来源档案日期比目的档案日期为新的档案.
  /EXCLUDE:file1[+file2][+file3]
               指定档案清单字串.每个字串
               应该在档案中的不同行.如果有字串对应到要进行复制的档案绝
               对路径的任何部分,这个档案会被排除复制.例如,指定字串
               obj 或 .obj 的话,会排除所有在 obj 目录下副档名是
               .obj 的档案复制.
  /P           在建立每个目的档案时显示提示.
  /S           复制每个目录及其包含的子目录,不复制空目录.
  /E           复制每个目录及其包含的子目录,也复制空目录./S 与 /E
               相同,能够用来修改 /T.
  /V           验证每个新档案.
  /W           在复制之前提示您按键继续.
  /C           如果错误发生时也继续复制.
  /I           如果目的不存在且复制一个以上的档案的话,就假设指定的
               目的一定是目录.
  /Q           在复制时不要显示档名.
  /F           在复制时显示来源及目的档案的全部档名.
  /L           显示要复制的档案.
  /G           允许加密档案复制到不支援加密的
               目的地.
  /H           时复制隐藏档和系统档.
  /R           覆盖唯读档案.
  /T           建立目录结构,但不复制其中的档案.不包括空目录及子目录.
               /T /E 会包括空目录及子目录.
  /U           只复制已经存在目的位置的档案.
  /K           复制档案属性.通常 Xcopy 会重设唯读的属性.
  /N           用所产生的短档名来进行复制.
  /O           复制档案所有权及 ACL 资讯.
  /X           复制档案审查设定 (包含 /O).
  /Y           不要提示您确认是否要覆盖一个已经存在的档案.
  /-Y          示您确认是否要覆盖一个已经存在的档案.
  /Z           在可重新开始的模式中复制网路档案.

1 2 3  下一页

Tags:利用 批处理 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接