C # método para lograr actualizaciones automáticas de software

Este artículo analiza los ejemplos utilizando el método C # para lograr actualizaciones automáticas de software, es una característica muy útil, vale la pena el aprendizaje y referencia. De la siguiente manera:

1. Descripción general de los temas:

Durante mucho tiempo, la mayoría de los programadores en la final es utilizar el Cliente / Servidor, o utilizar la arquitectura de debate navegador / servidor, en el que estos argumentos, el programa de mantenimiento de c / s diferencia estructura, las dificultades de diseño, mejorar los costes de mantenimiento conveniente, alta es una factor muy importante. Hay muchos usuarios corporativos es por esta razón por renunciar al uso de C / S. Sin embargo, cuando una aplicación debe utilizar la estructura C / S para lograr así su función, ¿cómo resolvemos la implementación del cliente y la escalada automática? La implementación es muy simple, basta con hacer clic en el instalador, la dificultad es que cada vez que se libera una nueva versión, la actualización automática. Ahora bien, nuestro objetivo es simple, queremos tener nada que ver con el desarrollo de una aplicación específica actualiza automáticamente el sistema puede volver a utilizar. Ahora I proporciona un sistema de actualización automática escrito en C # es un conjunto de reutilizable para todos.

2. La dificultad para actualizar automáticamente la aplicación de software existente

 En primer lugar, con el fin de encontrar las actualizaciones en un servidor remoto, la aplicación debe tener una manera de solicitar información al servidor, lo que requiere la programación de red, aplicación sencilla y protocolo de servidor de comunicaciones.
 La segunda es la de descarga. Descargar las miradas no tienen que considerar el tema de la red, pero deben considerar la descarga del archivo solicitado por el usuario, y descargar archivos de gran tamaño sin el consentimiento del usuario. Amistoso actualizar automáticamente la aplicación va a utilizar el ancho de banda restante para descargar la actualización. Suena simple, pero es un problema técnico, por suerte, tenemos una solución.
 Una tercera consideración es el uso de la nueva aplicación para reemplazar el proceso de solicitud original. La pregunta más interesante, ya que requiere el código para ejecutar retirarse del sistema, hay varias maneras de lograr esta función [5], este programa es implementado para reemplazar la función de importante nueva versión de la aplicación mediante la comparación de las viejas y nuevas versiones del número de fecha.

3. El principio de las actualizaciones automáticas de software en línea

 Escribir dos programas, uno es el programa principal; actualización de un programa; todas las tareas de actualización son manejados por el proceso de actualización se ha completado.
 . ① iniciar el programa de actualización, se conecta el programa de actualización en el sitio web, descargar el nuevo programa principal (por supuesto también incluye archivos de la biblioteca de soporte, archivos de configuración XML, etc.) en una carpeta temporal;
 . ② actualizar para obtener el archivo de configuración XML en el servidor de la nueva versión del programa el número actualizado de versión o fecha o tamaño de archivo;
 ③ actualizar las aplicaciones de cliente existentes para obtener la fecha de actualización más reciente o número de versión o tamaño de archivo, comparar los dos; Si encuentra que el proceso de actualización es mayor que la fecha original de la última versión del programa fecha, si se solicita al usuario a actualizar, o está utilizando el comparar las versiones existentes con la versión más reciente, el último descubrimiento de si se le pide al usuario actualizar, sino que también se compara con otros atributos tales como tamaño del archivo, programa de actualización tamaño del archivo encontró más grande que la versión antigua el tamaño del programa, el usuario tiene que actualizar. En este trabajo se compara el uso de viejas y nuevas versiones actualizadas número para indicar al usuario actualizar.
 . ④ Si decide actualizar, se llega a descargar la lista de archivos para iniciar la documentación del lote descarga;
 . ⑤ detecta programa de actualización si la antigua actividad, si la vieja actividad principal está cerrado;
 . ⑥ Retire el programa principal, la copia temporal archivo en la carpeta a la ubicación adecuada;
 . ⑦ comprobar el estado del programa principal, cuando el estado es activo, se inicia un nuevo programa principal;
 ⑧ actualización cerrada, la actualización se ha completado.

4. Implementar actualizaciones en línea de los pasos clave con C #

Aquí, he utilizado principalmente información actualizada para detectar la necesidad de descargar la versión de actualización.

①. Preparar un archivo de configuración XML

Nombre AutoUpdater.xml, funciona como una plantilla con la actualización, necesidad de información de visualización se va a actualizar.
Nombre AutoUpdater.xml, funciona como una plantilla con la actualización, necesidad de información de visualización se va a actualizar.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

<?xml version="1.0"?> //xml版本号

<AutoUpdater>

<URLAddres URL="http://192.168.198.113/vbroker/log/"/>//升级文件所在服务器端的网址

<UpdateInfo>

<UpdateTime Date = "2005-02-02"/> //升级文件的更新日期

<Version Num = "1.0.0.1"/> //升级文件的版本号

</UpdateInfo>

<UpdateFileList> //升级文件列表

<UpdateFile FileName = "aa.txt"/> //共有三个文件需升级

<UpdateFile FileName = "VB40.rar"/>

<UpdateFile FileName = "VB4-1.CAB"/>

</UpdateFileList>

<RestartApp>

<ReStart Allow = "Yes"/> //允许重新启动应用程序

<AppName Name = "TIMS.exe"/> //启动的应用程序名

</RestartApp>

</AutoUpdater>

// xml version
// URL del servidor de archivo de actualización
// Actualización de actualización Fecha de archivo
número // versión del archivo de actualización
// actualizar la lista de archivos
// Hay tres documentos necesitan actualizar
// permitido reiniciar la aplicación
// aperturas el nombre de la aplicación

 Del documento XML anterior que se puede actualizar documento actualizado donde la dirección del servidor, actualizar el documento, una lista de archivos necesita ser actualizado, en el que un total de tres documentos a ser actualizado: aa.txt, VB40.rar, VB4-1.CAB. Y si se debe permitir el reinicio de la aplicación y reiniciar el nombre de la aplicación.

②. Obtiene la aplicación cliente y el programa de actualización del lado del servidor última fecha de actualización

función disponible () es implementado por GetTheLastUpdateTime.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

private string GetTheLastUpdateTime(string Dir)

{

string LastUpdateTime = "";

string AutoUpdaterFileName = Dir + @"\AutoUpdater.xml";

if(!File.Exists(AutoUpdaterFileName))

return LastUpdateTime;

//打开xml文件

FileStream myFile = new FileStream(AutoUpdaterFileName,FileMode.Open);

//xml文件阅读器

XmlTextReader xml = new XmlTextReader(myFile);

while(xml.Read())

{

if(xml.Name == "UpdateTime")

{

//获取升级文档的最后一次更新日期

LastUpdateTime = xml.GetAttribute("Date");

break;

}

}

xml.Close();

myFile.Close();

return LastUpdateTime;

}

Abierta a través de documento XML XMLTextReader, leer el tiempo de actualización a fin de obtener la fecha valor correspondiente, que es la última actualización del servidor de tiempo de actualización de archivos.

Las llamadas a funciones para lograr:

?

1

2

3

4

5

6

//获取客户端指定路径下的应用程序最近一次更新时间

string thePreUpdateDate = GetTheLastUpdateTime(Application.StartupPath);

Application.StartupPath指客户端应用程序所在的路径。

//获得从服务器端已下载文档的最近一次更新日期

string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);

theFolder.FullName指在升级文档下载到客户机上的临时文件夹所在的路径。

③. Comparar Fecha

La aplicación cliente y la fecha de actualización del programa del lado del servidor última actualización Última actualización de las comparaciones de fechas.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

//获得已下载文档的最近一次更新日期

string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);

if(thePreUpdateDate != "")

{

//如果客户端将升级的应用程序的更新日期大于服务器端升级的应用程序的更新日期

if(Convert.ToDateTime(thePreUpdateDate)>=Convert.ToDateTime(theLastsUpdateDate))

{

MessageBox.Show("当前软件已经是最新的,无需更新!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

this.Close();

}

}

this.labDownFile.Text = "下载更新文件";

this.labFileName.Refresh();

this.btnCancel.Enabled = true;

this.progressBar.Position = 0;

this.progressBarTotal.Position = 0;

this.progressBarTotal.Refresh();

this.progressBar.Refresh();

//通过动态数组获取下载文件的列表

ArrayList List = GetDownFileList(GetTheUpdateURL(),theFolder.FullName);

string[] urls = new string[List.Count];

List.CopyTo(urls, 0);

La aplicación fecha y del lado del servidor de actualización de un cliente para descargar la fecha de la solicitud, y si el primero es mayor que el segundo, no se actualiza, si el primero es menor que el segundo, a continuación, obtener una lista de los archivos de descarga a través de una matriz dinámica, iniciar la descarga del archivo.

() Es implementado por BatchDownload. Detecta programa de actualización si la antigua actividad, si la vieja actividad principal es cerrada; quite el viejo programa principal, copiar archivos en la carpeta temporal a la ubicación adecuada, comprobar el estado del programa principal, si el estado está activo, iniciar un nuevo programa principal.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

private void BatchDownload(object data)

{

this.Invoke(this.activeStateChanger, new object[]{true, false});

try

{

DownloadInstructions instructions = (DownloadInstructions) data;

//批量下载

using(BatchDownloader bDL = new BatchDownloader())

{

bDL.CurrentProgressChanged += new DownloadProgressHandler(this.SingleProgressChanged);

bDL.StateChanged += new DownloadProgressHandler(this.StateChanged);

bDL.FileChanged += new DownloadProgressHandler(bDL_FileChanged);

bDL.TotalProgressChanged += new DownloadProgressHandler(bDL_TotalProgressChanged);

bDL.Download(instructions.URLs, instructions.Destination, (ManualResetEvent) this.cancelEvent);

}

}

catch(Exception ex)

{

ShowErrorMessage(ex);

}

this.Invoke(this.activeStateChanger, new object[]{false, false});

this.labFileName.Text = "";

//更新程序

if(this._Update)

{

//关闭原有的应用程序

this.labDownFile.Text = "正在关闭程序....";

System.Diagnostics.Process[]proc=System.Diagnostics.Process.GetProcessesByName("TIMS");

//关闭原有应用程序的所有进程

foreach(System.Diagnostics.Process pro in proc)

{

pro.Kill();

}

DirectoryInfo theFolder=new DirectoryInfo(Path.GetTempPath()+"JurassicUpdate");

if(theFolder.Exists)

{

foreach(FileInfo theFile in theFolder.GetFiles())

{

//如果临时文件夹下存在与应用程序所在目录下的文件同名的文件,则删除应用程序目录下的文件

if(File.Exists(Application.StartupPath + \\"+Path.GetFileName(theFile.FullName)))

File.Delete(Application.StartupPath + "\\"+Path.GetFileName(theFile.FullName));

//将临时文件夹的文件移到应用程序所在的目录下

File.Move(theFile.FullName,Application.StartupPath + \\"+Path.GetFileName(theFile.FullName));

}

}

//启动安装程序

this.labDownFile.Text = "正在启动程序....";

System.Diagnostics.Process.Start(Application.StartupPath + "\\" + "TIMS.exe");

this.Close();

}

}

Publicado seis artículos originales · ganado elogios 189 · vistas 280 000 +

Supongo que te gusta

Origin blog.csdn.net/newbie_xymt/article/details/102571848
Recomendado
Clasificación