¿Cómo utilizar C# para crear un programa de actualización de software?
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
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; p>
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 p>
This.labDownFile.Text = "Iniciando programa...";
System. diagnóstico. proceso. Inicio(aplicación. ruta de inicio " \ \ " " tims . exe));
FLIGHTY.CN
This. close();
} p>
}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.