【问题标题】:How can I remove all traces of a ClickOnce application from a customer's computer?如何从客户的计算机中删除 ClickOnce 应用程序的所有痕迹?
【发布时间】:2012-09-12 18:48:13
【问题描述】:

我有一个 ClickOnce 应用程序,大约有 120 位客户在使用它。本周,我发现有两个客户在一月份拒绝了更新,并被困在旧版本上。我通过删除我们服务器上使用的旧版本的 ASP 脚本发现了这一点。未更新的客户收到 404 并致电询问原因。

一位客户再次点击我们的安装按钮并获得最新版本没问题。另一个点击了我们的安装按钮并得到一个“应用程序验证没有成功”的错误。错误的详细信息是 SomeImage.gif “计算的哈希值与清单中指定的不同。”

我不想部署新版本,因为这通常会导致电话询问“您添加了我要求的内容了吗?”

我认为我应该能够完全卸载应用程序并重新安装有问题的用户。没有。错误仍然存​​在。如何删除 Windows 卸载过程留下的任何会导致此错误持续存在的内容?

更新:

我在客户的 Windows Vista 计算机上找到了文件夹 C:\Users\User\AppData\Local\Apps\2.0,并将其删除。我们再次运行安装程序,重新下载应用程序后错误仍然存​​在。不过,我不能 100% 确信这个文件夹包含整个程序,但它是我能找到的磁盘上唯一与我们的应用程序有些相似之处的位置。

【问题讨论】:

    标签: vb.net clickonce


    【解决方案1】:

    在 Visual Studio 工具文件夹 (C:\Program Files\Microsoft SDKS\Windows\v7.0A\bin) 中跟踪 mage.exe。将其复制到用户的计算机上。试试这个:

    mage.exe -cc
    

    这将清除 ClickOnce 应用程序。在您执行此操作后,我还将删除 \apps\2.0 文件夹 - 这是 ClickOnce 应用程序创建和使用的缓存。

    然后重新启动计算机。

    【讨论】:

    • 更准确地说,这些是需要删除的文件夹。在 Windows Vista 或更高版本上,%LocalAppData%\Apps\2.0 文件夹。在 Windows XP 上,%USERPROFILE%\Local Settings\Apps\2.0 文件夹。
    【解决方案2】:

    这可能有帮助,也可能没有帮助。我的错误消息与您描述的不完全一样,但我最终能够通过以下方式删除我机器上的最终痕迹:

    HKEY_CLASSES_ROOT\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0
    

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

    这是在 Windows 7 64 位上。

    【讨论】:

      【解决方案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
        

        【讨论】:

        • Rene:我更新了我的问题,说我找到了目录并删除了它。运行安装后,此用户的错误仍然存​​在。您是否还有其他线索,例如我可以删除与应用程序相关的注册表项(或其他任何内容)?感谢您的帮助。
        • 神圣的涂鸦,不要删除整个应用程序数据文件夹。所有应用程序都使用它,而不仅仅是 ClickOnce。
        【解决方案5】:

        您是否尝试过使用 ClickOnce 应用程序回滚版本?您可以在进入程序和功能时执行此操作,然后在您的应用上卸载。

        这应该会让您的应用处于再次请求最新更新的状态。

        【讨论】:

        • 是的,我已经尝试过回滚。回滚和后续安装更新后,错误仍然存​​在。
        猜你喜欢
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 2014-06-26
        • 2011-09-22
        • 2014-02-08
        • 2016-04-27
        • 2016-02-04
        • 1970-01-01
        相关资源
        最近更新 更多