如何从客户计算机中删除 ClickOnce 应用程序的所有痕迹?



我有一个ClickOnce应用程序,大约有120个客户正在使用。本周,我发现有两个客户拒绝了1月份的更新,并被卡在了旧版本上。我是在删除我们服务器上旧版本的ASP脚本时发现这个问题的。没有更新的客户会收到404,并打电话询问原因。

一个客户再次点击我们的安装按钮,得到了最新的版本没有问题。另一个点击我们的安装按钮,得到一个"应用程序验证没有成功"的错误。该错误的详细信息是SomeImage.gif"与manifest中指定的计算散列不同"。

我不想部署一个新版本,因为那通常会导致电话问,"你添加了我要求的东西了吗?"

我想我应该能够完全卸载应用程序,并与一个问题用户重新安装。不。错误仍然存在。我如何删除Windows卸载过程中留下的任何可能导致此错误持续存在的内容?

更新:

我在客户的windows Vista电脑上找到了文件夹C:UsersUserAppDataLocalApps2.0,并删除了它。我们再次运行安装程序,重新下载应用程序后错误仍然存在。虽然我不能百分之百确信这个文件夹包含了整个程序,但它是我在磁盘上能找到的唯一一个包含与我们的应用程序相似的位置。

在Visual Studio工具文件夹(C:Program FilesMicrosoft SDKSWindowsv7.0Abin)中找到mage.exe。将其复制到用户的计算机上。试试这个:

mage.exe -cc

清除ClickOnce应用程序。我也会删除apps2.0文件夹后,你这样做-这是创建和ClickOnce应用程序使用的缓存。

然后重新启动计算机

这可能有帮助,也可能没有帮助。我的错误信息并不完全像你描述的那样,但我最终能够通过执行以下命令来删除机器上的最后痕迹:

HKEY_CLASSES_ROOTSoftwareMicrosoftWindowsCurrentVersionDeploymentSideBySide2.0

我删除了所有与我的应用程序名称相似的孙子键。之后我就可以安装并运行最新版本了。

尝试做一个"干净的解决方案",然后再做另一个构建。如果你发布时没有增加版本号,我认为现有的安装不会收到更新消息。

如果您已经运行了卸载程序并且它还没有对其进行排序,请尝试删除

中的文件
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应用程序回滚一个版本?你可以在程序和功能中这样做,然后卸载你的应用程序。

这会让你的应用处于一种状态,它会再次请求最新的更新。

最新更新