现在假设我们有一个程序想要在广域网上面实现智能升级..
一般情况下会有以下几个步骤:
1.主程序(Process A)启动,主线程继续运行,开辟新线程检测升级服务器有没有新版本提供更新。
2.如果没有版本可以更新,升级线程退出;否则,提示用户是否要进行升级,用户确定升级之后,该线程启动升级程序(Process B)连接升级服务器,然后线程自行退出。
3.升级程序(Process B)连接服务器并与其进行传输交互,将更新文件下载并放到临时temp目录中,主程序(Process A)在此期间一切正常运行。
4.Process B此时已经完成与服务器的传输操作,给出用户提示,表示程序更新,Process A被强行关闭进程,ProcessB将temp目录中的更新文件覆盖原文件.执行完毕重新启动进程Process A,Process B进程自行退出。
5.Process A重新正常运行,此时运行的已经是新版本程序。
系统实现:
1.定义IUpdate接口
2.定义INetServices传输接口
2.设计升级服务器类(实现IUpdate和INetServices接口)
3.设计升级客户端类(实现IUpdate和INetServices接口)
IUpdate接口结构:
interface IUpdate
{
string GetCurrentVersion(); //得到版本号
string[] GetFileList(); //得到文件列表
byte[] GetSigleFileByName(string FileName); //得到文件字节流数组
}
INetServices接口结构:
interface INetServices
{
HostType SocketType{get;} //Socket类型,这里是一个枚举Server或者Client
int SocketBufferedSize{get;} //缓冲区大小
bool IsConnected{get;} //是否连接状态
DateTime ConnectionTime{get; set;} //连接时间,用于检测是否超时
string ConnectionID{get;} //连接ID,可以用Socket的散列做标识
byte[] RequestCommand{get;set;} //请求命令类型
void Connect(); //连接,如果是Server类则以监听实现,Client类则以连接实现
void Send(byte[] b);
byte[] Received();
}
用Server和Client类分别实现以上两个接口和其中的具体方法,然后创建一个新项目调用Server/Client类库。
一般情况下会有以下几个步骤:
1.主程序(Process A)启动,主线程继续运行,开辟新线程检测升级服务器有没有新版本提供更新。
2.如果没有版本可以更新,升级线程退出;否则,提示用户是否要进行升级,用户确定升级之后,该线程启动升级程序(Process B)连接升级服务器,然后线程自行退出。
3.升级程序(Process B)连接服务器并与其进行传输交互,将更新文件下载并放到临时temp目录中,主程序(Process A)在此期间一切正常运行。
4.Process B此时已经完成与服务器的传输操作,给出用户提示,表示程序更新,Process A被强行关闭进程,ProcessB将temp目录中的更新文件覆盖原文件.执行完毕重新启动进程Process A,Process B进程自行退出。
5.Process A重新正常运行,此时运行的已经是新版本程序。
系统实现:
1.定义IUpdate接口
2.定义INetServices传输接口
2.设计升级服务器类(实现IUpdate和INetServices接口)
3.设计升级客户端类(实现IUpdate和INetServices接口)
IUpdate接口结构:
interface IUpdate
{
string GetCurrentVersion(); //得到版本号
string[] GetFileList(); //得到文件列表
byte[] GetSigleFileByName(string FileName); //得到文件字节流数组
}
INetServices接口结构:
interface INetServices
{
HostType SocketType{get;} //Socket类型,这里是一个枚举Server或者Client
int SocketBufferedSize{get;} //缓冲区大小
bool IsConnected{get;} //是否连接状态
DateTime ConnectionTime{get; set;} //连接时间,用于检测是否超时
string ConnectionID{get;} //连接ID,可以用Socket的散列做标识
byte[] RequestCommand{get;set;} //请求命令类型
void Connect(); //连接,如果是Server类则以监听实现,Client类则以连接实现
void Send(byte[] b);
byte[] Received();
}
用Server和Client类分别实现以上两个接口和其中的具体方法,然后创建一个新项目调用Server/Client类库。