2010-05-20 17 views
19

Tengo una aplicación ClickOnce que está dejando todas las versiones anteriores en mi disco. Es una aplicación corporativa interna que recibe actualizaciones frecuentes, por lo que es un desastre para inflar rápidamente nuestro tamaño de copia de seguridad.La implementación de ClickOnce está dejando varias versiones (sí, más de dos)

De acuerdo con la documentación y otras preguntas sobre desbordamiento de Stack  , se supone que solo deja las versiones actual y anterior en el disco. Sin embargo, cada vez que despliego el proyecto y actualizo un cliente, obtengo otra copia de todos los archivos EXE, DLL y de datos. No estoy haciendo ningún cambio en absoluto a la aplicación, solo empujando la implementación nuevamente en Visual Studio.

¿Cómo puedo solucionar este problema?

El problema parece ocurrir tanto en Windows 7 como en Windows XP, así como en Windows de 64 bits y 32 bits.

que he hecho un diff de las carpetas donde se ha instalado la versión y los siguientes archivos son diferentes:

MyApp.exe.manifest 
MyApp.exe.cdf-ms 
MyDll1.cdf-ms 
MyDll2.cdf-ms 

No hay archivos ejecutables reales son diferentes, ni el MyApp.manifest, MyDll1.manifest, etc.

¿Qué tal una alternativa. ¿Es seguro buscar otras carpetas que contengan mi aplicación en tiempo de ejecución y eliminarlas? ¿Eso va a romper algo?

¿Es ClickOnce simplemente una misteriosa y misteriosa caja negra?

+0

Para ser claro, ¿quiere decir que todas las versiones anteriores permanecen almacenadas en la máquina * cliente *? Todas las versiones deben permanecer en la * ubicación de implementación * hasta/a menos que las elimine, ya que puede tener diferentes usuarios en versiones diferentes en cualquier momento. – Jay

+0

Sí, en el equipo cliente, oculto en las carpetas de usuario – Clyde

+0

¿Hay alguna diferencia si especifica un número de versión mínimo requerido en la configuración de publicación? – Jay

Respuesta

6

Creo que finalmente lo he descifrado. Por alguna razón desconocida (e inaceptable, francamente), la limpieza de las versiones anteriores no ocurrirá si la versión más nueva se está ejecutando; simplemente falla silenciosamente.

La limpieza intenta ejecutarse como sale la versión anterior, pero debido a que reinicié la aplicación, la nueva versión ya se está iniciando, bloqueando la limpieza.

Además, tenga en cuenta que el "servicio scavenger" mencionado en otras respuestas parece ser una fabricación total. No he encontrado documentación de ningún servicio de este tipo, ni ninguna evidencia de que se esté ejecutando. La limpieza parece realizarse en línea como parte del proceso de actualización de clickonce.

+0

Nos encontramos con el mismo problema con nuestra aplicación corporativa. Nuestra aplicación se actualiza en código con 'ApplicationDeployment.CurrentDeployment.Update()'. No reiniciar después de que la actualización no resolvió el problema, las versiones anteriores permanecen en el disco. ¿Has logrado resolver el problema? – Niki

0

¿Lo está verificando de inmediato? ¿Ni siquiera se van después de un día más o menos? Se supone que el servicio scavenger ClickOnce se activa y elimina las versiones anteriores. Si empuja la versión más reciente como una actualización requerida, ¿elimina las otras versiones? (Para hacer esto, configure la versión mínima requerida en el cuadro de diálogo Actualizaciones a la misma versión que está implementando).

+0

La versión mínima requerida no hace nada. ¿Hay alguna manera de ejecutar este servicio de "ClickOnce scavenger" inmediatamente? ¿Hay alguna documentación sobre este servicio scavenger?No he oído hablar de él – Clyde

+0

Además, creé una nueva aplicación de formularios de Windows y la implementé con un solo clic y se comportó correctamente, dejando solo dos versiones. Entonces, hay algo acerca de mi aplicación real que es diferente, pero no puedo encontrar ninguna diferencia en su configuración de publicación. – Clyde

+0

Y sí, todavía están allí un día más tarde – Clyde

1

El servicio scavenger es parte del motor ClickOnce; se ejecuta automáticamente y no es algo a lo que puedas acceder directamente. Debería venir y limpiar las versiones anteriores.

Pregunta sobre la versión mínima. Si implementa la nueva versión & establece la versión mínima requerida en la nueva versión, ¿actualiza la aplicación a esa versión? Luego, deja el (los) anterior (es) en el disco?

¿Hay algún patrón que pueda ver? ¿Existe un límite en la cantidad de implementaciones que está almacenando en caché?

También hay algo acerca de las carpetas ocultas que hace cosquillas en los bordes de mi memoria; los archivos no están realmente allí. Haré un poco de investigación y revisaré mis notas para ver qué puedo encontrar.

¿Qué tipo de aplicación es? WinForms/WPF/VSTO?

Cuando dice que está almacenando en caché carpetas, ¿qué carpeta es? Para una aplicación de winforms, por ejemplo, hay dos carpetas creadas para cada versión (xxxxtion ... y xxxxexe ... o algo así) más un grupo de carpetas, una para cada ensamblado incluido en la implementación: estas son versiones en caché de los ensamblajes, para evitar tener que descargarlos cada vez si no han cambiado. ¿Son las carpetas xxxxtion y xxxxexe de las que está viendo múltiples?

+0

Es una aplicación de winforms y tiene los dos tipos de carpetas que describió. Solo hay dos carpetas "exe" que contienen el icono de la aplicación, el archivo de configuración y un archivo de ayuda chm que he incluido como contenido de la aplicación. Son las carpetas "tion" que se duplican sin fin. Cada uno contiene el exe, todos los dlls, MÁS los archivos que estaban en la carpeta "exe", incluido el archivo 10 meg chm. – Clyde

+0

No sé si es importante, pero no tengo la versión de autoverificación de la aplicación al inicio; eso se maneja en código usando ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate y luego ApplicationDeployment.CurrentDeployment.Update() – Clyde

+0

ha intentado cambiarlo para actualizar automáticamente y ver si borra los archivos? – RobinDotNet

-1

How to Delete

Clear Click-Once (versioning) Cache

A partir de los documentos:

aplicaciones ClickOnce que se alojan en línea están limitados en la cantidad de espacio que pueden ocupar por una cuota que limita el tamaño de la memoria caché de ClickOnce. El tamaño de caché se aplica a todas las aplicaciones en línea del usuario; una única aplicación en línea parcialmente confiable se limita a ocupar la mitad del espacio de cuota. Las aplicaciones instaladas no están limitadas por el tamaño de caché y no cuentan contra el límite de caché. Para todas las aplicaciones ClickOnce, la memoria caché conserva solo la versión actual y la versión instalada previamente. De forma predeterminada, las computadoras cliente tienen 250 MB de almacenamiento para las aplicaciones ClickOnce en línea. Los archivos de datos no cuentan para este límite. Un administrador del sistema puede ampliar o reducir esta cuota en una computadora cliente particular al cambiar la clave de registro, HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB, que es un valor DWORD que expresa el tamaño de caché en kilobytes . Por ejemplo, para reducir el tamaño de la memoria caché a 50 MB, cambiaría este valor a 51200

+1

Creo que ha malinterpretado los documentos: este límite de caché es el límite total para todas las aplicaciones de un clic en el equipo. Para una sola aplicación, "el caché solo conserva la versión actual y la versión instalada anteriormente" http://msdn.microsoft.com/en-us/library/267k390a(v=VS.100).aspx – Clyde

0

Sé que esta pregunta es un poco antigua, pero tuvimos este problema recientemente, y no estoy seguro de la causa tampoco. Solo parece suceder algunas veces, y para algunos usuarios.

Intentamos implementar código que eliminaría parcialmente ciertas carpetas antiguas en el directorio ..\Apps\2.0; sin embargo, al retroceder a una versión anterior, si se supone que la carpeta de la versión anterior estaba allí pero fue eliminada por nuestro código, ClickOnce no lo hace compruebe si se ha eliminado y vuelva a descargarlo, en su lugar, supone que todavía está allí, y luego la instalación se daña y TI necesita reinstalarse manualmente para cada usuario antes de poder volver a usar la aplicación. Terrible si tienes más de 50 usuarios.

Si alguien conoce una forma de forzar a ClickOnce a volver a descargar todas las dependencias de archivos antes/después de la actualización, me gustaría saberlo.

Cuestiones relacionadas