#vb.net #clickonce
#vb.net #clickonce
Вопрос:
У меня есть приложение ClickOnce, которым пользуются около 120 клиентов. На этой неделе я узнал, что два клиента отказались от обновления в январе и застряли на старой версии. Я обнаружил это, удалив ASP-скрипт старых версий, используемых на нашем сервере. Клиенты, которые не обновляют, получают сообщение 404 и звонят, чтобы спросить, почему.
Один клиент снова нажал нашу кнопку установки и без проблем получил последнюю версию. Другой пользователь нажал нашу кнопку установки и получил сообщение об ошибке «Проверка приложения не удалась». Подробности ошибки следующие SomeImage.gif «имеет вычисляемый хэш, отличный от указанного в манифесте».
Я не хочу развертывать новую версию, потому что это обычно приводит к телефонным звонкам с вопросом: «вы уже добавили то, что я просил?»
Я полагаю, что должен иметь возможность полностью удалить приложение и повторно установить связь с одним проблемным пользователем. Нет. Ошибка сохраняется. Как я могу удалить все, что остается в процессе удаления Windows, что могло бы привести к сохранению этой ошибки?
Обновить:
Я нашел папку C:UsersUserAppDataLocalApps2.0
на компьютере клиента с Windows Vista и удалил ее. Мы снова запустили программу установки, и ошибка не исчезла после повторной загрузки приложения. Я не уверен на 100%, что в этой папке содержалась вся программа целиком, но это единственное место на диске, которое я смог найти, содержащее некоторое сходство с нашим приложением.
Ответ №1:
Найдите его mage.exe
в папке Visual Studio tools ( C:Program FilesMicrosoft SDKSWindowsv7.0Abin
). Скопируйте его на компьютер пользователя. Попробуйте это:
mage.exe -cc
Это очищает приложения ClickOnce. Я бы также удалил apps2.0
папку после того, как вы это сделаете — это кэш, созданный и используемый приложениями ClickOnce.
Затем перезагрузите компьютер.
Комментарии:
1. Если быть более точным, это папки, которые необходимо удалить. В Windows Vista или более поздней версии используйте папку %LocalAppData%Apps2.0. В Windows XP, папка %USERPROFILE%Local SettingsApps2.0.
Ответ №2:
Это может помочь, а может и не помочь. Мои сообщения об ошибках были не совсем такими, как вы описали, но в конечном итоге я смог удалить окончательные следы на своем компьютере, перейдя в:
HKEY_CLASSES_ROOTSoftwareMicrosoftWindowsCurrentVersionDeploymentSideBySide2.0
Я удалил все дочерние ключи с именами, похожими на имена моего приложения. После этого я смог установить и запустить последнюю версию.
Это в 64-разрядной версии Windows 7.
Ответ №3:
Попробуйте выполнить «чистое решение», а затем выполнить другую сборку. Если вы опубликуете без увеличения номера версии, я не думаю, что существующие установки получат сообщение об обновлении.
Ответ №4:
Если вы уже запустили удаление и оно не отсортировало его, попробуйте удалить файлы в
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
Комментарии:
1. Рене: Я обновил свой вопрос, чтобы сказать, что я нашел каталог и удалил его. После запуска установки ошибка сохраняется для этого пользователя. У вас есть еще какие-нибудь подсказки, например, запись в реестре (или что-нибудь еще) Я могу удалить, связанные с приложением? Спасибо за вашу помощь.
2. Святые угодники, не удаляйте всю папку с данными приложения. Это используется всеми приложениями, а не только ClickOnce.
Ответ №5:
Вы пытались откатить версию с приложением ClickOnce? Вы можете сделать это, когда доберетесь до программ и компонентов, а затем удалить свое приложение.
Это должно привести ваше приложение в состояние, в котором оно снова будет запрашивать последнее обновление.
Комментарии:
1. Да, я пробовал откат. Ошибка сохраняется после отката и последующей установки обновления.