Как я могу удалить все следы приложения ClickOnce с компьютера клиента?
У меня есть приложение ClickOnce, которым пользуются около 120 клиентов. На этой неделе я узнал, что два клиента отказались от обновления в январе и застряли на старой версии. Я обнаружил это, удалив ASP-скрипт старых версий, используемых на нашем сервере. Клиенты, которые не обновляются, получают 404 и звонят, чтобы спросить, почему.
Один клиент снова нажал кнопку установки и без проблем получил последнюю версию. Другой нажал нашу кнопку установки и получил ошибку "Проверка приложения не удалась". Подробности ошибки: SomeImage.gif "имеет вычисленный хеш, отличный от указанного в манифесте".
Я не хочу развертывать новую версию, потому что это обычно приводит к телефонным звонкам с вопросом: "Вы добавили то, что я просил?"
Я полагаю, что смогу полностью удалить приложение и повторно связаться с одним проблемным пользователем. Нету. Ошибка сохраняется. Как я могу удалить все, что оставляет процесс удаления Windows, который может привести к сохранению этой ошибки?
Обновить:
Я нашел папку C:\Users\User\AppData\Local\Apps\2.0
на компьютере клиента Windows Vista, и удалил его. Мы снова запустили установщик, и ошибка сохранилась после повторной загрузки приложения. Я не уверен на 100%, что эта папка содержала всю программу, но это единственное место на диске, которое я мог найти, в котором было какое-то сходство с нашим приложением.
5 ответов
Отслеживать mage.exe
в папке инструментов Visual Studio (C:\Program Files\Microsoft SDKS\Windows\v7.0A\bin
). Скопируйте его на компьютер пользователя. Попробуй это:
mage.exe -cc
Это очищает приложения ClickOnce. Я бы тоже удалил \apps\2.0
папка ПОСЛЕ того, как вы это сделаете - это кеш, созданный и используемый приложениями ClickOnce.
Затем перезагрузите компьютер.
Это может или не может помочь. Мои сообщения об ошибках были не совсем такими, как вы описали, но в итоге я смог удалить последние следы на моей машине, перейдя по ссылке:
HKEY_CLASSES_ROOT\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0
Я удалил все ключи внуков, которые носили имена, похожие на мое приложение. После этого я смог установить и запустить последнюю версию.
Это на Windows 7 64 бит.
Если вы уже запустили деинсталляцию, но она не отсортирована, попробуйте удалить файлы в
C:\Documents and Settings\<userName>\Application Data\
Вам придется осмотреться, чтобы найти свое приложение, но это не должно быть слишком сложно.
Раньше я использовал приведенный ниже код, чтобы пользователи не нажимали кнопку обновления, это установит их, даже не подозревая об этом.
Private Shared Function UpdatedApp(ByVal AppLog As Logger) As Boolean
Try
' Check to see that this program has been delpoyed
If Deployment.Application.ApplicationDeployment.IsNetworkDeployed Then
Dim CurrApp As System.Deployment.Application.ApplicationDeployment = System.Deployment.Application.ApplicationDeployment.CurrentDeployment
AppLog.WriteLine("Application Version : {0}", CurrApp.CurrentVersion)
AppLog.WriteLine("Checking for updates")
' If theres a update then Install it
If CurrApp.CheckForUpdate() Then
AppLog.WriteLine("An updated version is available. This update will now be applied.")
' Update the app to the current version
CurrApp.Update()
' Upgrade the settings (that is, the connection string).
My.Settings.Upgrade()
AppLog.WriteLine("Version {0} is now installed, the application will now restart", CurrApp.UpdatedVersion)
Return True
End If
Else
AppLog.WriteLine("Application version: *Dev Version*")
End If
Catch ex As Exception
AppLog.WriteLine("The application is unable to check for updates. The program will execute on a possibly outdated version. Error {0}", ex.ToString)
End Try
' Always return false unless the update has been applied (even if the update throws an error)
Return False
End Function
Попробуйте сделать "Чистое решение", а затем сделать другую сборку. Если вы публикуете без увеличения номера версии, я не думаю, что существующие установки получат сообщение об обновлении.
Вы пытались откатить версию с помощью приложения ClickOnce? Вы можете сделать это, когда попали в раздел "Программы и компоненты", а затем удалить приложение.
Это должно оставить ваше приложение в состоянии, когда оно будет запрашивать последнее обновление снова.