У меня есть приложение 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 является просто очевидным таинственным черным квадратом?
Кажется, я наконец-то разобрался с этой проблемой. По какой-то неизвестной (и неприемлемой, честно говоря) причине очистка старых версий не происходит, если запущена более новая версия - она просто молча завершается.
Очистка пытается запуститься при выходе из старой версии, но поскольку я перезапустил приложение, новая версия уже запускается, блокируя очистку.
Также обратите внимание, что "служба уборки мусора", упомянутая в других ответах, кажется полной выдумкой. Я не нашел ни документации о такой службе, ни каких-либо доказательств ее работы. Похоже, что очистка происходит в процессе обновления clickonce.
Вы проверяете их сразу? Они не исчезают даже через день или около того? Предполагается, что служба ClickOnce удаляет старые версии. Если вы устанавливаете последнюю версию в качестве обязательного обновления, удаляет ли она другие версии? (Для этого установите минимальную требуемую версию в диалоговом окне "Обновления" на ту же версию, которую вы устанавливаете).
Служба мусорщика является частью механизма ClickOnce; он запускается автоматически, и вы не можете получить к нему прямой доступ. Он должен приходить и очищать старые версии.
Вопрос по минимальной версии. Если вы развертываете новую версию и устанавливаете минимальную требуемую версию на новую версию №, обновляет ли приложение до этой версии? Затем оставляет прежние на диске?
Есть ли какой-нибудь узор, который вы можете увидеть? Есть ли ограничение на количество кэшируемых развертываний?
В теневых папках есть что-то, что щекочет по краям мою память; файлов на самом деле нет. Я проведу небольшое исследование, просмотрю свои записи и посмотрю, что найду.
Что это за приложение? WinForms / WPF / VSTO?
Когда вы говорите, что это кешированные папки, какая это папка? Для приложения winforms, например, есть две папки, созданные для каждой версии (xxxxtion ... и xxxxexe ... или что-то в этом роде), плюс куча папок - по одной для каждой сборки, включенной в развертывание - это кешированные версии сборок, чтобы не загружать их каждый раз, если они не изменились. Вы видите кратные папки xxxxtion и xxxxexe?
Очистить кэш Click-Once (версионность)
Из документации:
Приложения ClickOnce, размещенные в Интернете, ограничены в объеме пространства, которое они могут занимать, квотой, ограничивающей размер кэша ClickOnce. Размер кэша применяется ко всем онлайн-приложениям пользователя; одно частично доверенное онлайн-приложение ограничено в занятии половины пространства квоты. Установленные приложения не ограничены размером кэша и не учитываются в лимите кэша. Для всех приложений ClickOnce кэш сохраняет только текущую версию и ранее установленную версию. По умолчанию клиентские компьютеры имеют 250 МБ памяти для хранения онлайн-приложений ClickOnce. Файлы данных не учитываются в этом лимите. Системный администратор может увеличить или уменьшить эту квоту на конкретном клиентском компьютере, изменив ключ реестра HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\OnlineAppQuotaInKB, который представляет собой значение DWORD, выражающее размер кэша в килобайтах. Например, чтобы уменьшить размер кэша до 50 МБ, измените это значение на 51200