Использование XML для проверки обновлений приложений - PullRequest
0 голосов
/ 21 апреля 2011

Прежде чем вы спросите, смотрел ли я на Google, позвольте мне ответить да, я прочитал страницу за страницей.Сайт за сайтом, и я не смог получить нужную мне информацию.

Я пытаюсь сделать очень простую проверку обновлений для своего приложения.Тот, который будет анализировать онлайн XML-файл и отображать данные в определенных местах.А также возможность проанализировать ссылку для местоположения загрузки (не будет ftp или что-то в этом роде, но что-то вроде filehost, поскольку мой хостинг-план не позволяет мне загружать файлы размером более 3 МБ)

В любом случае, здесьэто то, что я получил до сих пор:

XML-код:

<code>
   <Info>
       <Version>2.8.0.0</Version>

       <Link>www.filehost.com</Link>

       <Description>Added New Features To GUI</Description>

   </Info>
</code>

Вот код приложения и то, что я хочу, чтобы он показывал и делал.

using System;
using System.Windows.Forms;
using System.Xml;

namespace SAM
{
    public partial class UpdateCheck : DevExpress.XtraEditors.XtraForm
    {
        public UpdateCheck()
        {
            InitializeComponent();
            lblCurrentVersion.Text = "Current Version: " + Application.ProductVersion;
        }

        private void MainForm_Shown(object sender, EventArgs e)
        {
            BringToFront();
        }


        private void BtnChkUpdate_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("http://www.crimson-downloads.com/SAM/UpdateCheck.xml");

        }
    }
}

IЯ ищу, чтобы приложение анализировало xml таким образом.

<Version>2.8.0.0</Version>  Will change the text for "lblUpdateVersion" like how I got the current version label set in the InitializeComponent();
<Description>Added New Features To GUI</Description> to be parsed out into the "textDescription" Which I can probably do myself.
<Link>www.filehost.com</Link>  Will parse into the button control so when pressed will open up the users default browser and follow the link.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Я сделал именно это в своем приложении.

Во-первых, вы храните на своем веб-хосте файл XML, в котором хранится информация об обновлении. Шахта находится на http://getquitter.com/version.xml и имеет следующую структуру:

<versioninformation>
  <latestversion>1.2.0.0</latestversion> 
  <latestversionurl>http://www.getquitter.com/quitter-1.2.0.zip</latestversionurl> 
  <filename>quitter-1.2.0.zip</filename> 
</versioninformation>

Во-вторых, напишите метод для получения этого xml с вашего хоста:

Public Function GetWebPage(ByVal URL As String) As String
    Dim Request As System.Net.HttpWebRequest = CType(WebRequest.Create(New Uri(URL)), HttpWebRequest)
    With Request
        .Method = "GET"
        .MaximumAutomaticRedirections = 4
        .MaximumResponseHeadersLength = 4
        .ContentLength = 0
    End With

    Dim ReadStream As StreamReader = Nothing
    Dim Response As HttpWebResponse = Nothing
    Dim ResponseText As String = String.Empty

    Try
        Response = CType(Request.GetResponse, HttpWebResponse)
        Dim ReceiveStream As Stream = Response.GetResponseStream
        ReadStream = New StreamReader(ReceiveStream, System.Text.Encoding.UTF8)
        ResponseText = ReadStream.ReadToEnd
        Response.Close()
        ReadStream.Close()

    Catch ex As Exception
        ResponseText = String.Empty
    End Try

    Return ResponseText
End Function

Затем вызовите этот метод, чтобы получить xml и загрузить в документ xml.

Dim VersionInfo As New System.Xml.XmlDocument
VersionInfo.LoadXml(GetWebPage("http://www.getquitter.com/version.xml"))

С загруженным version.xml вы можете теперь анализировать отдельные фрагменты данных, которые вам нужны, чтобы определить, нужно ли вам захватывать новую версию.

Dim LatestVersion As New Version(QuitterInfoXML.SelectSingleNode("//latestversion").InnerText)
Dim CurrentVersion As Version = My.Application.Info.Version
If LatestVersion > CurrentVersion Then
     ''download the new version using the Url in the xml
End If

Вот как это делает мое приложение. Вы можете скачать исходный код, если хотите (это приложение с открытым исходным кодом), если вы хотите использовать его в качестве модели. Это на http://quitter.codeplex.com. Надеюсь, это поможет!

1 голос
/ 29 апреля 2011
using System;
using System.Windows.Forms;
using System.Xml;
using System.Net;
using System.IO;
using System.Diagnostics;

namespace SAM
{

    public partial class UpdateCheck : DevExpress.XtraEditors.XtraForm
    {
        public UpdateCheck()
        {
            InitializeComponent();
            lblCurrentVersion.Text = "Current Version:  " + Application.ProductVersion;
        }

        private void MainForm_Shown(object sender, EventArgs e)
        {
            BringToFront();
        }

        public static string GetWebPage(string URL)
        {
            System.Net.HttpWebRequest Request = (HttpWebRequest)(WebRequest.Create(new Uri(URL)));
            Request.Method = "GET";
            Request.MaximumAutomaticRedirections = 4;
            Request.MaximumResponseHeadersLength = 4;
            Request.ContentLength = 0;

            StreamReader ReadStream = null;
            HttpWebResponse Response = null;
            string ResponseText = string.Empty;

            try
            {
                Response = (HttpWebResponse)(Request.GetResponse());
                Stream ReceiveStream = Response.GetResponseStream();
                ReadStream = new StreamReader(ReceiveStream, System.Text.Encoding.UTF8);
                ResponseText = ReadStream.ReadToEnd();
                Response.Close();
                ReadStream.Close();

            }
            catch (Exception ex)
            {
                ResponseText = string.Empty;
            }

            return ResponseText;
        }

        private void BtnChkUpdate_Click(object sender, EventArgs e)
        {
            System.Xml.XmlDocument VersionInfo = new System.Xml.XmlDocument();
            VersionInfo.LoadXml(GetWebPage("http://www.crimson-downloads.com/SAM/UpdateCheck.xml"));

            lblUpdateVersion.Text = "Latest Version:  " + (VersionInfo.SelectSingleNode("//latestversion").InnerText);

            textDescription.Text = VersionInfo.SelectSingleNode("//description").InnerText;

        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            Process process = new Process();
            // Configure the process using the StartInfo properties.
            process.StartInfo.FileName = "http://www.crimson-downloads.com/SAM/Refresh.htm";
            process.StartInfo.Arguments = "-n";
            process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
            process.Start();
        }
    }
}

Коротко и просто.Спасибо, у меня были проблемы с чем-то другим, использующим xml, но с помощью, которую ты мне дал, я смог применить знания и к этому.

...