Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar C# para crear un programa de actualización de software?

¿Cómo utilizar C# para crear un programa de actualización de software?

Implementación de C# del programa de actualización automática de software en línea

Fecha: 2008-07-29 Clics: 87 colecciones y envíos recomendados

Durante mucho tiempo, los programadores han estado debatiendo si utilizar cliente/ servidor O una estructura de navegador/servidor. En estos debates, la mala mantenibilidad, el diseño difícil, la actualización inconveniente y el alto costo de mantenimiento de los programas de estructura C/S son un factor muy importante. Muchos usuarios empresariales dejan de utilizar C/S por este motivo. Sin embargo, cuando una aplicación debe utilizar la estructura C/S para lograr bien sus funciones, ¿cómo resolver los problemas de implementación del cliente y actualización automática? La implementación es muy simple, simplemente haga clic en el instalador. Lo difícil es que cada vez que se lanza una nueva versión, se puede actualizar automáticamente. Ahora, nuestro objetivo es simple. Esperamos desarrollar un sistema de actualización automática reutilizable que sea independiente de aplicaciones específicas. A continuación le proporcionaré un sistema de actualización automática reutilizable escrito en C#.

1. Dificultades para realizar la actualización automática del software Bienvenido a www.flighty.cn, un mundo frívolo.

Primero, para encontrar actualizaciones en el servidor remoto, la aplicación debe tener una forma de consultar la red, lo que requiere programación de red y un protocolo de comunicación simple entre la aplicación y el servidor. Un mundo de frivolidad. FLIGHTY.CN

El segundo se está descargando. Parece que no es necesario considerar Internet al descargar, pero sí debe considerar descargar archivos solicitados por los usuarios y descargar archivos grandes sin el consentimiento del usuario. Las aplicaciones amigables de actualización automática utilizarán el ancho de banda restante para descargar actualizaciones. Esto suena simple, pero es una cuestión técnica. Afortunadamente, existe una solución.

Este artículo proviene de www.flighty.cn, un mundo frívolo.

Lo tercero a considerar es el proceso de sustitución de la aplicación original por una nueva aplicación. Esta pregunta es interesante porque requiere que el código se elimine del sistema en tiempo de ejecución. Hay muchas maneras de lograr esta funcionalidad. Este programa realiza principalmente la función de reemplazar la nueva versión de la aplicación comparando los números de fecha de las versiones antigua y nueva. ¡Www.flighty.cn comparte recursos de programación de alta calidad!

2. El principio de realizar una actualización automática del software en línea - www. FLIGHTY.CN

Escribe dos programas, uno es el programa principal y el otro es el programa de actualización;

Www.flighty.cn es frívolo.

1. Inicie el programa de actualización, que se conecta al sitio web y descarga el nuevo programa principal (incluidos los archivos de biblioteca compatibles, documentos de configuración XML, etc.) en una carpeta temporal. Frivolous World

2. El programa de actualización obtiene la fecha de actualización o el número de versión o el tamaño del archivo de la nueva versión del programa en el archivo de configuración XML del lado del servidor;

Www. Frivolous World

3. El programa de actualización obtiene la última fecha de actualización, el número de versión o el tamaño del archivo de la aplicación cliente original y lo compara si descubre que la fecha del programa de actualización es posterior a la última; fecha del programa original, luego pregunte al usuario si desea actualizar o comparar la versión existente con la última versión. Si se encuentra la última versión, pregunte al usuario si desea actualizar; algunas personas también usan otros atributos, como el tamaño del archivo, para comparar y encontrar que el tamaño del archivo del programa actualizado es mayor que el de la versión anterior, y luego solicita al usuario que actualice. Este artículo recuerda principalmente a los usuarios que actualicen comparando los números de fecha de actualización de las versiones antiguas y nuevas. Este artículo proviene de www.flighty.cn, un mundo frívolo.

4. Si el usuario elige actualizar, obtenga la lista de archivos descargados y comience a descargar archivos en lotes; www.flighty.cn

5. el programa está activo y, de ser así, cierre el programa principal anterior; www.flighty.cn

6. Elimine el programa principal anterior y copie los archivos en la carpeta temporal a la ubicación correspondiente; ¡cn comparte recursos de programación de alta calidad!

7. Comprobar el estado del programa principal.

Si el estado está activo, inicie un nuevo programa principal;

Bienvenido a www.flighty.cn, un mundo frívolo.

8. Cierre el programa de actualización para completar la actualización.

Bienvenido a www.flighty.cn, un mundo frívolo.

3. Pasos clave para lograr la actualización en línea usando C# -www. FLIGHTY.CN

Aquí utilizo principalmente información de fecha para detectar si es necesario descargar una versión actualizada.

1. Preparar el archivo de configuración XML

Www. Frivolous World

El nombre es AutoUpdater.xml y se utiliza como plantilla de actualización para mostrar información que debe actualizarse.

Www.flighty.cn es frívolo.

La siguiente es la cita:

Www. Mundo frívolo

lt? versión xml="1.0"? gt//número de versión xml

ltPrograma de actualización automáticagt

ltURL adres URL = "-¡Comparta recursos de programación de alta calidad!

ltupdate file FileName = " vb40. rar "/ gt;

ltupdate file FileName = " VB4-1. CAB "/>;

lt/actualizar lista de archivos gt;

ltRestartApp gt

ltRestartAllow = "Sí"/ gt;//Permitir que la aplicación reinicie el programa

ltAppName Name = "tims.exe"/gt; //El nombre de la aplicación iniciada

lt/RestartApp gt;

lt/auto updater gt

Este artículo proviene de www.flighty.cn, un mundo frívolo

Bienvenido a www.flighty.cn, un mundo frívolo /p>

Del XML anterior. documento, podemos conocer la dirección del servidor donde se encuentra el documento de actualización, la fecha de actualización del documento de actualización y la lista de archivos a actualizar, de los cuales * * * hay tres archivos a actualizar: aa.txt , VB40.rar, VB4-1.cab Y si se permite reiniciar la aplicación y el nombre de la aplicación después de reiniciar

Flighty World www.flighty.cn

2. Obtenga la última fecha de actualización para aplicaciones cliente y actualizaciones del lado del servidor. Este artículo proviene de www.flighty.cn, un mundo volador a través de GetTheLastUpdateTime(). p>El siguiente es el contenido citado:

Www.flighty.cn es frívolo

Cadena privada GetTheLastUpdateTime (directorio de cadenas)

{

string LastUpdateTime =

cadena nombre de archivo del actualizador automático = Dir @ " \ actualizador automático . XML "

If (! file. Exists (nombre del archivo de actualización automática))

Volver LastUpdateTime

//Abrir archivo xml

FileStream mi archivo = nuevo FileStream(nombre de archivo del actualizador automático, FileMode.

Abrir);

//lector de archivos xml

XmlTextReader XML = nuevo XmlTextReader(mi archivo);

while(xml.Read())

{

if(xml.Name == "UpdateTime")

{

//Obtenga la última fecha de actualización del documento de actualización.

Última hora de actualización = xml. get atributo(" Fecha ");

Descanso;

}

}

xml. close();

Mi archivo. close();

Return LastUpdateTime

} www.flighty.cn

Www.flighty.cn es frívolo.

Abra el documento XML a través de XmlTextReader, lea la hora de actualización y obtenga el valor correspondiente a Fecha, que es la última hora de actualización del archivo de actualización del lado del servidor.

Implementación de llamadas a funciones:

El siguiente es el contenido de referencia: www. Frivolous World

//Obtenga la última hora de actualización de la aplicación en la ruta especificada por el cliente.

cadena thePreUpdateDate = GetTheLastUpdateTime(ruta de aplicación.inicio);

Aplicar. StartupPath se refiere a la ruta donde se encuentra la aplicación cliente. Un mundo de frivolidad. FLIGHTY.CN

//Obtiene la última fecha de actualización del documento descargado del servidor.

cadena theLastsUpdateDate = GetTheLastUpdateTime(carpeta. Nombre completo

Carpeta. El nombre completo hace referencia a la ruta a la carpeta temporal donde se descarga el documento de actualización al cliente.

Este artículo proviene de www.flighty.cn, un mundo frívolo.

Flighty World-www.flighty.cn-¡comparta recursos de programación de alta calidad!

3. Comparar fechas

Compare la fecha de la última actualización de la aplicación cliente con la fecha de la última actualización del programa de actualización del lado del servidor. Www.flighty.cn es frívolo.

La siguiente es una cita:

El mundo de la frivolidad. FLIGHTY.CN

//Obtenga la última fecha de actualización del documento descargado.

cadena theLastsUpdateDate = GetTheLastUpdateTime(carpeta.nombre completo);

if(thePreUpdateDate!= "")

{

/ / Si la fecha de actualización de la aplicación que actualizará el cliente es posterior a la fecha de actualización de la aplicación que actualizará el servidor.

If (Convert.today time(thePreUpdateDate)>=Convert.ToDateTime(Last Update Date)

{

MessageBox.Show("El software actual es la última Sí, no es necesario actualizar ", "Mensaje del sistema", messageboxbuttons.ok, icono del cuadro de mensajes. información);

Esto.

close();

}

}

This.labDownFile.Text = "Descargar archivo de actualización";

este nombre de archivo de laboratorio. . actualizar();

esta. BTN cancelar. habilitado = verdadero;

esta barra de progreso = 0;

esta posición de la barra de progreso. 0;

esta. barra de progreso total.refresh();

esta. barra de progreso.refresh();Www. Frivolous World

//Obtiene la lista de archivos descargados a través de una matriz dinámica.

ArrayList List = GetDownFileList(GetTheUpdateURL(), theFolder. Nombre completo

string[] urls = new String[List. contar];

Lista. copiar a (URL, 0); Www.flighty.cn es frívolo.

www.flighty.cn

Compare la fecha de la aplicación actualizada por el cliente con la fecha de la aplicación descargada por el servidor. Si la primera es mayor que la segunda, no se actualizará si el primero es más pequeño que el segundo, obtenga la lista de archivos descargados a través de la matriz dinámica y descargue el archivo.

Flighty World-www.flighty.cn-¡comparta recursos de programación de alta calidad!

Se implementa mediante la función BatchDownload(). El programa de actualización detecta si el programa principal antiguo está activo y lo cierra si está activo; lo elimina y copia los archivos en la carpeta temporal en la ubicación correspondiente; Si el estado es activo, se inicia un nuevo programa principal.

www.flighty.cn

La siguiente es la cita: www. Frivolous World

Descarga por lotes nula privada (datos del objeto)

{

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

Pruebe

{

Instrucción DownloadInstructions = (DownloadInstructions) datos;

Pruebe

{

Instrucción de descarga de instrucciones = (Descarga de instrucciones) datos;

p>

//Descarga por lotes

Usar (descargador por lotes bDL = nuevo descargador por lotes())

{

bDL. CurrentProgressChanged = nuevo DownloadProgressHandler(this.SingleProgressChanged);

bDL. estado cambiado = nuevo DownloadProgressHandler(this.state cambiado);

bDL. archivo cambiado = nuevo DownloadProgressHandler(bDL _ archivo cambiado);

bDL. TotalProgressChanged = nuevo DownloadProgressHandler(bDL _ TotalProgressChanged);

bDL. Descargar (Instrucciones.

URL, descripción. Destino, (ManualResetEvent)this . cancelevent);

}

}

catch (excepción ex)

{

ShowErrorMessage(ex); bitsCN_com

}

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

este nombre de archivo de laboratorio = " "

//Actualizar programa

<; p>Si (this._update)

{

//Cierra la aplicación original, frívola www.flighty.cn.

This.labDownFile.Text = "Cerrar el programa...";

System. diagnóstico.Proceso[]proc = Sistema. proceso de diagnóstico. getprocessesbyname(" TIMS ");

//Cerrar todos los procesos de la aplicación original.

foreach(system.diagnosis.Process pro está en progreso)

{

Estimado. kill();

}

información del directorio la carpeta = nueva información del directorio(Path.GetTempPath() " jurascicupdate ");

if (theFolder.exists )

{

foreach(Archivo en la carpeta de información del archivo. GetFiles())

{

//Si el archivo temporal Si hay un archivo con el mismo nombre que el archivo en el directorio de la aplicación, elimine el archivo en el directorio de la aplicación.

Si (Archivo. Existe(Aplicación.Ruta de inicio \ \ " Ruta. GetFileName(Archivo. Nombre completo)))

Archivo. Eliminar(Aplicación. Ruta de inicio " \ \ " Path.GetFileName(File.FullName));

//Mueve los archivos de la carpeta temporal al directorio donde se encuentra la aplicación.

File.Move(File . Full name) , aplicación. ruta de inicio \ \ "Ruta. GetFileName (archivo. Nombre completo));

}

}

//Iniciar el programa de instalación

This.labDownFile.Text = "Iniciando programa...";

System. diagnóstico. proceso. Inicio(aplicación. ruta de inicio " \ \ " " tims . exe));

FLIGHTY.CN

This. close();

}

}Bienvenido a www.flighty.cn, un mundo frívolo

Bienvenido a www.flighty.cn, un mundo frívolo

Este programa es el código clave para lograr Actualización en línea Los pasos son un poco complicados: primero use el método Invoke para llamar sincrónicamente al proceso de cambio de estado, luego llame a la clase de descarga por lotes (batch downloader. cs) en la biblioteca de enlaces dinámicos para iniciar la descarga por lotes y luego determine el original. Si la aplicación principal se ha cerrado. De lo contrario, utilice Kill() para cerrar la aplicación principal.

A continuación, determine si hay un archivo con el mismo nombre que el archivo en el directorio donde se encuentra la aplicación en la carpeta temporal (es decir, el directorio donde se descarga el programa de actualización). Si existe un archivo con el mismo nombre, elimínelo en el directorio de la aplicación y muévalo en la carpeta temporal al directorio donde se encuentra la aplicación. Finalmente, reinicie la aplicación principal. Esto completa la actualización.