2010-03-05 32 views
8

Tenemos un conjunto de programas que verifican las nuevas versiones al inicio y luego descargan nuevas versiones para ejecutarlas si es necesario. Obviamente, esto es un problema en Windows 7, cuando está bloqueado como un "usuario estándar", ya que no pueden escribir en el directorio c: \ archivos de programa y debajo. ¿Alguien ha visto un ejemplo de una aplicación que se mueve con el problema?Actualización automática del programa y Windows 7

Nuestras aplicaciones están escritas en Delphi, pero un ejemplo en cualquier idioma sería útil.

Gracias de antemano

Actualización:

Ya tenemos un sistema para determing si existe una nueva versión, el único problema es la descarga e instalar (si es necesario), ya que esto requiere elevación. No puedo pensar en una forma que no requiera un mensaje de elevación, o que nuestros usuarios reduzcan su configuración de seguridad.

Actualización 2:

le he pedido a un subsequent question, en lugar de añadir una nueva aquí

Respuesta

7

Hay dos opciones para la instalación de la aplicación:

  1. aplicación es disponible para todos los usuarios de: instalación o actualización requiere elevación para Windows Vista y hasta
  2. La aplicación es disponible para un usuario: instale o actualice la aplicación en el perfil de usuario en % LOCALAPPDATA%, no se requiere elevación

Anuncio 2: Google Chrome hace esto. Se instala el .exe aquí:

% LOCALAPPDATA% \ Google \ Chrome \ Application \ chrome.exe

--jeroen

+0

Jeroen, Parece casi la respuesta correcta. ¿Puedo registrar typelibraries localmente (para un usuario) también? – Mmarquee

+0

Puede, si mantiene su propio mecanismo de registro. No puede si usa el mecanismo de registro predeterminado (todo el sistema). ¿Qué tipo de funcionalidad quieres registrar? –

+0

Estamos registrando typelibraries. Parece que hay una llamada de API apta para hacer esto por usuario que Delphi no publica. Luego usamos estos tipos de letra para proporcionar capacidades que permitan el uso para agregar nuestra funcionalidad separada en una 'aplicación'. Esto lo hacemos actualmente pero en xp podemos salirse con la nuestra, y en Windows 7 no podemos. – Mmarquee

6

Normalmente lo que se verá una aplicación que necesita hacer en caso de una escalada de permisos es algo como esto.

  1. aplicación determina si se necesita actualización
  2. de aplicación inicia un servicio "actualizador" que requiere permisos de "administrador"
  3. aplicación actualiza a sí mismo con esta actualización se reinicia
  4. aplicación

Este es un escenario bastante común, especialmente porque para actualizar su propia DLL necesita ir a un proceso secundario de todos modos.

1

O puede tenerlo para que el usuario ejecute una aplicación de iniciador.

  1. La aplicación utiliza la carpeta LOCALAPPATH \ para almacenar un caché de la aplicación principal.
  2. El iniciador comprueba si Internet tiene una versión más nueva de archivo (s) que el archivo en caché.
  3. lanzador lanza la aplicación en caché en LOCALAPPPATH
+0

Y si su aplicación lanzada contiene "setup" o "install" como parte de su nombre, se eleva automáticamente (después de un aviso por supuesto), lo que le permite escribir en esos bits protegidos. – skamradt

+0

@skamradt - perfecto, sí - solo recuerda que necesita compilarse con la instalación o instalarlo como parte del nombre, ¡no se puede renombrar después! –

1

Su aplicación puede comprobar si hay una nueva versión está disponible en el servidor remoto. Si es así, puede descargar los archivos de actualización en una de las carpetas específicas del usuario, como la carpeta temporal del usuario. Puede obtener la dirección de tales carpetas especiales usando la función de API SHGetSpecialFolder.

Una vez que se realiza la descarga, puede abrir un cuadro de diálogo que le dice al usuario que está listo para la actualización. Si el usuario está de acuerdo con la actualización, puede ejecutar el proceso de actualización con privilegios elevados (como administrador), y el proceso de actualización puede reemplazar los archivos existentes en su ruta de instalación con los que ya se descargaron en la carpeta Temp del usuario. Para ejecutar el actualizador de como administrador, puede utilizar ShellExecute:

ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL); 

Cuando se realiza la actualización, el proceso de actualización puede reiniciar la aplicación.

+1

No puede elevar un proceso que ya se está ejecutando, pero puede iniciar un nuevo proceso que se eleva a privilegios de administrador, y el código anterior lo hace. – vcldeveloper

3

Éstos son algunos consejos para que usted pueda moverse retos actualización:

  1. Si su archivo es nombres 'update.exe' o 'install.exe', forzará automáticamente un aviso de elevación de UAC. Esta es una manera fácil de hacer que el software existente omita los permisos de Windows Vista/7.
  2. No es una buena idea tener el proceso de actualización y verificación administrado desde dentro de su aplicación. El problema es que es probable que su aplicación bloquee los archivos y necesite actualizarse. Una aplicación externa debe administrar sus actualizaciones.
  3. La solución de actualización más sencilla es realizar una llamada HTTP que compruebe el número de versión del producto actual y luego descargar el binario del instalador si es necesario. Esto no le dará flexibilidad en las actualizaciones, pero es una solución rápida y fácil.

Nuestra empresa vende software que específicamente ayuda con las actualizaciones automáticas en Windows 7 UAC (puede visitar AutoUpdate + haciendo clic aquí: link text). Las mejores razones para usar una solución de terceros, cualquier solución, es que tendrá más flexibilidad con sus actualizaciones y también evitará los complejos desafíos de soportar diferentes versiones de Windows.

1

Si su aplicación usa MSI (Windows Installer) para su instalador, entonces User Account Control Patching, si está correctamente configurado, puede permitirle instalar actualizaciones sin elevación.

0
  1. Si su instalador no se ejecutó bajo administración, no necesita ningún derecho adicional para instalar la actualización.

  2. Si su instalador se ejecutó bajo administración, entonces puede crear una tarea en Task Sheduler. Digamos, ejecute esta tarea una vez a la semana, bajo esta cuenta (admin) y con los privilegios más altos. La tarea será tu actualizador. Sencillo.

+0

Vea también: https://blogs.msdn.com/b/larryosterman/archive/2007/08/20/applet-mitigations-updaters.aspx – Alex

Cuestiones relacionadas