批处理自动更新文件部署WinForm应用程序详解(转)

时间:2023-01-19 18:29:19

原链接:http://www.cnblogs.com/waxdoll/archive/2005/09/18/239410.html

 

先来废话:

.NET框架的主要目标之一就是简化部署,为此使用.NET开发的应用程序支持XCOPY部署,这在以前是不可想象的(当然说的是微软系列)。在.NET之前,安装一个组件(例如一个COM组件)意味着不仅要把组件复制到适当的目录,而且还要执行注册表修改之类的操作。但现在有了.NET,安装一个组件的全部操作就是将程序集复制到客户应用程序的bin目录,由于程序集包含完整的自我描述信息,应用程序可以立即开始使用程序集。这一切之所以成为可能,是因为编译器将标识符和元数据信息嵌入到了编译好的模块之中,而CLR利用这些信息来装入程序集的适当版本。标识符包含了装入和运行模块、查找程序集引用的其他模块所需的所有信息。这种安装也称为无干扰(Zero-Impact)安装,因为系统不会因为修改注册表、配置组件而受到影响;另外,无干扰安装也使得组件卸载操作不会对系统产生任何意外的影响,卸载组件时只要从特定的目录删除某些文件就可以了。

如何进行XCOPY部署呢?

以一个WinForm应用程序为例,在命令行中使用XCOPY命令将必要的文件复制到客户端的特定目录即可。
在命令行中输入XCOPY/?可以看到如下信息,这是XCOPY的使用方法:

 

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]
                           [/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           复制文件审核设置(隐含 /O)。
               现存目标文件。
  /-Y          导致提示以确认改写一个
               现存目标文件。
  /Z            用重新启动模式复制网络文件。

 


包含XCOPY命令的批处理文件的实际应用:

在开发.NET WinForm应用程序时,如何在局域网内部部署应用程序?使用包含XCOPY命令的批处理文件也许是最方便的方法,在客户端机器上建立批处理文件还可以实现软件的自动更新功能,下面的例子即实现客户端的自动更新。有一个小问题先解决以下,客户端机器的环境设置千差万别,操作系统也可能从Win9X到Win2003都有,从客户端机器访问服务器需要输入用户名和密码,有的甚至无法保存该用户名密码,这时候怎么办?需要在批处理文件中激活到服务器的网络连接,这时候可以利用IPC$(注意IPC$是NT/2000后才有的功能)。IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。可以使用net use \\(Server IP或Server Name)\ipc$ password /user:user来建立到服务器(Server IP或Server Name)的连接,但是应该注意的一点是,使用IPC$在同一时间内,两个IP之间只允许建立一个连接,所以在使用该命令建立连接之前最好使用net use * /del删除可能存在的到服务器的连接。下面是一个完整的批处理文件:

完整的批处理文件示例@ECHO ————————————————————
@ECHO 开始准备更新……
@ECHO ————————————————————
@ECHO 删除到服务器的所有连接……
@NET USE * /del /Y
@ECHO ————————————————————
@ECHO 激活到服务器的连接……
@NET USE \\waxdoll\ipc$ password /user:user
@ECHO ————————————————————
@ECHO 正准备复制文件,请稍候……
@ECHO ————————————————————
@XCOPY \\waxdoll\Debug E:\WinForm /Y/E
@ECHO ————————————————————
@ECHO 更新完成!
@ECHO ————————————————————
@Pause


批处理自动更新文件部署WinForm应用程序详解(转)

 

Life is like a boat, and I'm at sea.