2012-10-08 51 views
21

Para el proyecto en el que estoy trabajando, no tengo permitido usar ClickOnce. Mi jefe quiere que el programa se vea "real" (con un instalador, etc.).¿Cómo actualizar automáticamente una aplicación sin ClickOnce?

He instalado Visual Studio 2012 profesional, y he estado jugando un poco con el instalador InstallShield, y que sin duda hace que los instaladores agradables, pero no puedo encontrar la manera de permitir la aplicación de "actualización automática" (es decir, cuando se inicia, comprueba para asegurarse de que está utilizando la última versión).

Me han pedido que haga un pequeño cambio en el código, cambiando una adición a una resta, y realmente no quiero que la gente tenga que desinstalar la versión anterior, y luego tenga que volver a instalar la nueva versión todo el tiempo Hago un pequeño cambio como este.

¿Cómo puedo hacer que la aplicación busque actualizaciones e instalarlas? ¿O esto no es posible (o no es fácil)?

+0

posible duplicado de [biblioteca de auto-actualización para .NET?] (Http://stackoverflow.com/questions/691663/auto -update-library-for-net) –

Respuesta

15

Ya hay muchas preguntas sobre esto, así que lo referiré a ellas.

Una cosa que usted quiere asegurarse de que para evitar la necesidad de desinstalación, es que se utiliza el mismo código actualización en cada lanzamiento, pero cambia el código producto. Estos valores se encuentran en las propiedades del proyecto Installshield.

Algunas referencias:

+1

He intentado esto - entrar y cambiar el código del producto. Pero cuando voy a reinstalarlo, dice que está instalando, pero no cambia el programa ... ¿alguna idea? gracias :) – Toadums

+0

Oh, parece que realmente lo reinstaló (varias veces), pero nunca actualizó los archivos en mi computadora – Toadums

+0

¿La versión ya instalada se hizo usando el mismo Código de actualización que su instalador actual? De lo contrario, es posible que necesite usar Orca. También vea esta pregunta: http://stackoverflow.com/q/11540520/161052 – JYelton

1

El más comm en camino sería poner un archivo de texto simple (XML sería mejor) en su servidor web con la última versión de compilación. La aplicación descargará este archivo, verificará la versión e iniciará el actualizador. Un archivo típico sería el siguiente:

Aplicación archivo de actualización // Una cadena única que permita que su aplicación reconoce el tipo de archivo

versión: 1.0.0 // última versión de montaje

descarga: http://yourserver.com/ ... // Un enlace a la versión de descarga

redicrect: http://yournewserver.com/ ... // he utilizado este fi campo en caso de un cambio en la dirección del servidor. Esto le permitiría al cliente saber que necesita buscar una nueva dirección.

También puede agregar otros detalles importantes.

+0

tiene sentido. pero ¿cómo se evita el mensaje de: "Otra versión de este proyecto ya está instalada ..." cuando vas a volver a instalar? – Toadums

+0

según lo señalado por @Jelton mantenga el mismo código de actualización. Hay otras formas, pero olvidé :( –

1

Este es el código para actualizar el archivo pero no para instalar Este programa se realiza a través de dos para copiar archivos a la fecha más reciente y ejecutar su programa automáticamente.pueden ayudarle

el bloc de notas abrir y guardar archivos de abajo con extensión .bat

xcopy \\IP address\folder_share_name\*.* /s /y /d /q 
start "label" /b "youraplicationname.exe" 
3

Creo que usted debe comprobar lo siguiente proyecto en codeplex.com http://autoupdater.codeplex.com/

Esta aplicación muestra se desarrolló en C# una biblioteca con el nombre del proyecto "AutoUpdater". La DLL "AutoUpdater" se puede usar en una aplicación de Windows C (WinForm y WPF).

Hay ciertas características sobre el AutoUpdater:

  1. fácil de implementar y utilizar.
  2. Repetición automática de la aplicación después de comprobar la actualización.
  3. Proceso de actualización transparente para el usuario.
  4. Para evitar el bloqueo del hilo principal mediante la descarga de subprocesos múltiples.
  5. Posibilidad de actualizar el sistema y también el programa de actualización automática.
  6. Un código que no necesita cambios cuando es utilizado por diferentes sistemas y podría compilarse en una biblioteca.
  7. Fácil para el usuario para descargar los archivos de actualización.

¿Cómo utilizar?

En el programa que desea que se pueda actualizar automáticamente, solo necesita llamar a la función AutoUpdate en el procedimiento Main. La función AutoUpdate verificará la versión con la lectura de un archivo ubicado en un sitio web/FTP. Si la versión del programa es inferior a la que se lee, el programa descarga el programa de actualización automática y lo inicia y la función devuelve True, lo que significa que se ejecutará una actualización automática y se cerrará el programa actual. El programa de actualización automática recibe varios parámetros del programa que se actualizará y realiza la actualización automática necesaria y luego de eso inicia el sistema actualizado.

#region check and download new version program 
    bool bHasError = false; 
    IAutoUpdater autoUpdater = new AutoUpdater(); 
    try 
    { 
     autoUpdater.Update(); 
    } 
    catch (WebException exp) 
    { 
     MessageBox.Show("Can not find the specified resource"); 
     bHasError = true; 
    } 
    catch (XmlException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (NotSupportedException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Upgrade address configuration error"); 
    } 
    catch (ArgumentException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (Exception exp) 
    { 
     bHasError = true; 
     MessageBox.Show("An error occurred during the upgrade process"); 
    } 
    finally 
    { 
     if (bHasError == true) 
     { 
      try 
      { 
       autoUpdater.RollBack(); 
      } 
      catch (Exception) 
      { 
      //Log the message to your file or database 
      } 
     } 
    } 
    #endregion 
1

Un Lay manera de los hombres es

en Main() cambiar el nombre del archivo de ensamblaje ejecutar .exe a alguna otra cosa fecha de registro de entrada y la hora de crear. y la fecha del archivo actualizado y la copia en la carpeta de la aplicación.

//Rename he executing file 
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); 

System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension); 

luego hacer el registro de entrada lógica y copiar el nuevo archivo para ejecutar la carpeta

Cuestiones relacionadas