Как проверить и обновить версию программы - PullRequest
0 голосов
/ 05 марта 2019

Итак, я хочу создать действительно простую функцию.Когда форма загружается, появляется всплывающее окно с предложением обновить пользователя.Если нажать «Да», он загрузит текстовый файл с последней версией и информацией о том, где загрузить последнюю версию программы.Если версия выше, загружается актуальное обновление.Но если равен, просто отменяет. Это действительно просто, но я нигде не могу найти ответ на него: (

Вот мой предыдущий подход:

        WebRequest wr = WebRequest.Create(new Uri("https://pastebin.com"));
        WebResponse ws = wr.GetResponse();
        StreamReader sr = new StreamReader(ws.GetResponseStream());

        string currentversion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
        string newversion = sr.ReadToEnd();

        if (currentversion.Contains(newversion))
        {
            System.Windows.Forms.MessageBox.Show("You Program is Up-to-Date", "Information",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("A new Version of the Program was detected! The program will now update to give you the latest features!", "Important",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            Process.Start("cmd.exe", "/C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del " +
      Application.ExecutablePath);
            Application.Exit();

1 Ответ

0 голосов
/ 05 марта 2019

Я сделал этот пример того, как проверить версию приложения local и сравнить ее с версией remote.Удаленный файл в этом случае представляет собой простой txt, который содержит version number и в следующей строке краткую информацию о том, где загрузить обновление при необходимости.

version-remote.txt

2.0.0.0
To download the latest version of the App, go to the website below.

Пример кода:

    private void f_main_Load(object sender, EventArgs e)
    {
        VerifyUpdate();
    }


    //verifies that the local version 
    //is different from the remote version
    private void VerifyUpdate()
    {
        //version local assembly version
        var vlocal = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
        //download remote version
        var vremot = new Version(DoenloadVersion().FirstOrDefault());


        var result = vlocal.CompareTo(vremot);
        if (result < 0)
        {
            UpdateQuestion();
        }
        else if (result > 0)
        {
            DowngradeQuestion();
        }
        else
        {
            AlreadyUpdateQuestion();
        }
    }


    //downloads the file containing the latest 
    //version number
    private string[] DoenloadVersion()
    {
        string remoteUri = "https://storage.googleapis.com/albtoos_pessoal/version-remote.txt";
        string localsave = ($"{System.IO.Directory.GetParent(@"../../").FullName}/version-remote.txt");

        WebClient webversion = new WebClient();

        //makes a copy of the remote version in the root folder
        webversion.DownloadFile(remoteUri, localsave);

        return File.ReadAllLines(localsave);
    }



    private void AlreadyUpdateQuestion()
    {
        DialogResult option = MessageBox.Show("You already have the last version!", "Program", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        if (option == DialogResult.Yes)
        {
            //do something
        }
    }

    private void UpdateQuestion()
    {
        DialogResult option = MessageBox.Show("Need Update", "Program", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
        if (option == DialogResult.Yes)
        {
            //do download
        }
    }

    private void DowngradeQuestion()
    {
        DialogResult option = MessageBox.Show("Need Downgrade", "Program", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
        if (option == DialogResult.Yes)
        {
            //do downgrade
        }
    }

Часть AlreadyUpdateQuestion(), UpdateQuestion() и DowngradeQuestion() больше похожа на иллюстрацию, поскольку здесь многое зависит откак вы хотите работать с пользователем.Но если вам нужно загрузить что-то большее, например, файл установки обновления, вам нужно будет поработать с mehlor в этой функции.

Возможно, есть лучший способ сделать это, но следуйте этому в качестве начальной ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...