单击一次更新到特定版本

时间:2013-10-08 10:41:55

标签: c# clickonce

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

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

使用c#

开发应用程序
  • 请注意,我们希望通过不在其外的应用程序执行此操作,例如:我们知道我们可以通过控制面板等回滚...但我们想要的是在应用程序内设置去一个比当前版本更高或更低的特定版本。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你正在达到ClickOnce的限制,无法做到这一点。有一个清单必须包含指向包含版本(新旧)的服务器的单个标识。将应用程序指向多个版本将无法正常工作。

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

答案 2 :(得分:0)

不太理想,但是如果您不顾一切就可以检索旧的二进制文件,则可以提供帮助

  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

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