3

我希望我的用户能够使用单击一次更新到特定版本。目前我们有帮助 | 检查更新,它只是更新到最新版本。

我想添加帮助 | 更新到版本(然后会提示用户输入一个版本号,并将它们更新到该版本(如果它们当前使用较低版本或使用较高版本))。

该应用程序是使用 c# 开发的

  • 请注意,我们希望通过应用程序而不是外部的应用程序来执行此操作,例如,我们知道我们可以通过控制面板等回滚......但我们想要的是应用程序内的工具可以转到高于或低于当前版本的特定版本.
4

3 回答 3

2

每次发布后,我只需做一些额外的工作就可以实现此功能,而无需用户提供详细说明。获取特定版本的方式是您需要为每个版本拥有多个 clickonce 目录

发布后,您需要在记事本中打开 myApplication.application 并进行更改

<deploymentProvider codebase="http://www.example.com/ClickOnce/MyApplication/MyApplication.application" />

<deploymentProvider codebase="http://www.example.com/ClickOnce/MyApplication1.02.03.45/MyApplication.application" />

或您将提供的任何版本;在上传到 clickonce 之前。

以下是用户如何获得特定版本

    Public Shared Sub GetSpecificVersion()
            Try
                Dim spre As String = InputBox("press enter to download the current version of myApplication. If you would want to download a specific version of myApplication please append the version number  i.e myApplication1.02.03.45", , "myApplication") 
                Dim spost As String = "/myApplication.application"
                Dim finalUrl As String = "http://www.example.com/clickonce/"
                finalUrl = finalUrl & spre & spost
                Try
                    My.Computer.Network.DownloadFile(finalUrl, "C:/ProgramFiles", Nothing, Nothing, Nothing, 

1000, True) 'url/filename/username/password/showui/timeout/overwriteExiting
                Process.Start("C:/ProgramFiles/myApplication.application")
                Application.Current.Shutdown()
                Dim r As String
            Catch ex As Exception
                MsgBox("The desired version of myApplication may not be typed correctly or is unavailable on clickonce. alternatively a connection could not be established to the clickonce server")
                MsgBox(ex.ToString())
            End Try
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
    End Sub

要获得特定版本,用户只需输入版本“myApplication1.02.34

这样做的副作用是使用清单检查连续更新只会检查该特定文件夹,我创建了第二种方法来从默认目录获取最新版本:

继承人获得中央版本

Public Shared Sub GetLatestCentralizedVersion()
Try
              My.Computer.Network.DownloadFile("http://www.example.com/clickonce/myApplication/myApplication.application", "C:/ProgramFiles/myApplication.application", Nothing, Nothing, Nothing, 1000, True) 'url/filename/username/password/showui/timeout/overwrite
            Process.Start("C:/ProgramFiles/myApplication.application")
            Application.Current.Shutdown()
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
    End Sub
于 2013-10-18T11:39:45.393 回答
1

不理想,但如果您迫切需要检索旧的二进制文件,它会有所帮助

  1. 转到 ClickOnce 服务器文件夹,它有一个setup.exepublish.htm myapplicationname.application在其他文件中,它还有一个名为Application Files
  2. 在此Application Files文件夹中,您将找到所有以前 ClickOnce 上传的版本
  3. 复制/下载您的版本的文件夹(命名为myapplicationname_1_2_30_145
  4. 重命名所有以“*.deploy”结尾的文件以删除该扩展名:
 find -type f -name '*.deploy' | while read f; do mv "$f" "${f%.deploy}"; done

现在您基本上可以像使用便携式应用程序一样使用它,双击可执行文件或其他东西

于 2019-05-14T10:06:37.920 回答
0

您遇到了 ClickOnce 的限制,无法做到这一点。有一个清单必须包含一个标识,该标识指向包含版本(新的或旧的)的服务器。将应用程序指向多个版本将不起作用。

要提供版本选择,您需要在 ClickOnce 基础架构之外为您的应用程序做一些事情,例如另一个允许用户选择安装特定版本的应用程序 - 这将是一个非常简单的下载清单类型程序,然后允许用户启动。不幸的是,每个应用程序都必须以不同的名称从不同的位置提供,例如附加版本号。

于 2013-10-11T09:17:47.383 回答