Развертывание ClickOnce оставляет несколько версий (да, более двух) - PullRequest
20 голосов
/ 20 мая 2010

У меня есть ClickOnce приложение, которое оставляет все старые версии на моем диске. Это внутреннее корпоративное приложение, которое регулярно обновляется, поэтому это является катастрофой для быстрого увеличения размера нашей резервной копии.

В соответствии с документацией и другими вопросами о переполнении стека предполагается оставить только текущую и предыдущие версии на диске. Однако каждый раз, когда я развертываю проект и обновляю клиента, я получаю еще одну копию всех EXE, DLL и файлов данных. Я не делаю никаких изменений в приложении, просто снова запускаю развертывание в Visual Studio.

Как мне решить эту проблему?

Проблема возникает как в Windows 7, так и в Windows XP, а также в 64-битной и 32-битной Windows.

Я проверил разные папки, в которых установлена ​​версия, и следующие файлы отличаются:

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

Фактические исполняемые файлы не отличаются, как и MyApp.manifest, MyDll1.manifest и т. Д.

Как насчет альтернативы. Безопасно ли искать другие папки, содержащие мое приложение, во время выполнения и удалять их? Это что-нибудь сломает?

Является ли ClickOnce просто загадочным черным ящиком?

Ответы [ 4 ]

6 голосов
/ 01 июня 2010

Думаю, я наконец-то понял это. По какой-то неизвестной (и неприемлемой, прямо скажем) причине, очистка старых версий не произойдет, если работает более новая версия - она ​​просто молча завершится неудачей.

Очистка пытается выполнить после выхода старой версии, но поскольку я перезапустил приложение, новая версия уже запускается, блокируя очистку.

Кроме того, обратите внимание, что «служба мусорщика», упомянутая в других ответах, кажется, полностью сфабрикована. Я не нашел ни документации ни о каком таком сервисе, ни доказательств его работы. Похоже, что очистка происходит как часть процесса обновления clickonce.

1 голос
/ 23 мая 2010

Сервис мусора является частью движка ClickOnce; он запускается автоматически, и вы не можете получить к нему доступ напрямую. Надо подойти и почистить старые версии.

Вопрос по минимальной версии. Если вы развернете новую версию и установите минимальную требуемую версию для новой версии #, будет ли обновляться приложение до этой версии? Затем оставляет первый (ые) на диске?

Есть ли какой-нибудь шаблон, который вы можете увидеть? Есть ли ограничение на количество развертываний, которые он кэширует?

Есть также кое-что о теневых папках, которые щекочут края моей памяти; файлы на самом деле не там. Я проведу небольшое исследование, посмотрю свои записи и посмотрю, что я смогу найти.

Что это за приложение? WinForms / WPF / VSTO?

Когда вы говорите, что это кеширование папок, какая это папка? Например, для приложения winforms есть две папки, созданные для каждой версии (xxxxtion ... и xxxxexe ... или что-то в этом роде), плюс несколько папок - по одной для каждой сборки, включенной в развертывание - это кэшированные версии сборок, чтобы избежать необходимости загружать их каждый раз, если они не изменились. Это папки xxxxtion и xxxxexe, которые вы видите кратными?

0 голосов
/ 28 мая 2010

Как удалить

Очистить кэш Click-Once (управление версиями)

Из документов:

Приложения ClickOnce, размещенные в Интернете, ограничены по объему пространства, которое они могут занимать квотой, которая ограничивает размер кэша ClickOnce. Размер кэша применяется ко всем онлайн-приложениям пользователя; одно частично доверенное онлайн-приложение может занимать половину квоты. Установленные приложения не ограничены размером кеша и не считаются с лимитом кеша. Для всех приложений ClickOnce кэш сохраняет только текущую версию и ранее установленную версию. По умолчанию на клиентских компьютерах предусмотрено 250 МБ памяти для онлайн-приложений ClickOnce. Файлы данных не учитываются в этом пределе. Системный администратор может увеличить или уменьшить эту квоту на конкретном клиентском компьютере, изменив ключ реестра HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB, который представляет собой значение DWORD, которое выражает размер кэша в килобайтах. , Например, чтобы уменьшить размер кэша до 50 МБ, вы должны изменить это значение на 51200

0 голосов
/ 20 мая 2010

Вы проверяете это немедленно? Они даже не уходят через день или около того? Сервис мусорщика ClickOnce должен прийти и удалить старые версии. Если вы выдвигаете последнюю версию как необходимое обновление, удаляет ли она другие версии? (Для этого установите минимальную требуемую версию в диалоговом окне «Обновления» на ту же версию, которую вы развертываете).

...