Member 14065947 Ответов: 5

Автоматическое обновление для VB.NET | формы windows


Привет. Поэтому я сделал автоматическое обновление для своей программы. Итак, код дан, используя Dropbox. Так в чем же заключается мой вопрос:
Версия моей программы-v1.0, и при обновлении ее затем удалите старую версию и сохраните новую версию.
Другой вопрос.
Как я могу установить его, когда программа открыта, чтобы распознать, что находится в v1.0 и как только version.txt изменено ли тогда распознавание v1.1, например?

Что я уже пробовал:

Public Sub CheckForUpdates()
        Dim file As String = Application.StartupPath & "/version.txt"
        Dim MyVer As String = My.Application.Info.Version.ToString
        If My.Computer.FileSystem.FileExists(file) Then
            My.Computer.FileSystem.DeleteFile(file)
        End If
Try
            My.Computer.Network.DownloadFile("https://www.dropbox.com/s/blalblakasdd/version.txt?dl=1", file)
        Catch ex As Exception
            MsgBox(ex.Message + " You are up to date.")
        End Try
        Dim LastVer As String = My.Computer.FileSystem.ReadAllText(file)
        If MyVer < LastVer Then
            MsgBox("Update Available!")
Try
                My.Computer.Network.DownloadFile("https://www.dropbox.com/s/blalblakasd/program.exe?dl=1", Application.StartupPath + "/program.exe")
            Catch ex As Exception
                MsgBox(ex.Message + " Error Downloading update.")
            End Try
            Process.Start(Application.StartupPath + "/Latest.exe")
        Else
            MsgBox("Program is up to date")
        End If
    End Sub

5 Ответов

Рейтинг:
44

MadMyche

Вы можете использовать ApplicationDeployment.CurrentVersion свойство для чтения приложение version это установлено в свойство проекта
ApplicationDeployment.Свойство CurrentVersion (System.Развертывание.Приложение) | Microsoft Docs[^]

Версия имеет свои собственные свойства для мажорных, минорных, ревизионных и сборочных номеров
Класс Версии (Система) | Microsoft Docs[^]

На этих страницах также есть некоторые примеры кода, которые могут вам помочь


Рейтинг:
33

RickZeeland

Знаете ли вы, что можно даже сделать ваше приложение самоуничтожающимся ?
Это может быть удобно, если вы хотите использовать только один исполняемый файл, см. статью CodeProject здесь: Как Сделать Так, Чтобы Ваше Приложение Немедленно Удалило Само Себя[^]
Есть даже другой метод: переименовать запущенный exe-файл, чтобы можно было разместить новый exe-файл, как ни странно, это разрешено Windows.
Но если вы удовлетворены вашим текущим решением, то, конечно, нет никакой необходимости в таких грязных трюках !


Рейтинг:
23

Dave Kreskowiak

Если ваш код делает то, для чего он, по-видимому, предназначен, у вас есть огромная проблема с дизайном.

Во-первых, приложение, которое вы запускаете, не должно быть вашим основным приложением. Это должно быть отдельное приложение, которое проверяет установленную версию приложения на сервере.

Затем, когда вы загружаете новый исполняемый файл, вы не можете записать его в тот же файл, который был запущен. Исполняемый файл остается заблокированным, пока он работает, так что нет никакого способа для приложения, чтобы заменить себя.

Другая проблема. Если вы устанавливаете приложение в папку в разделе Program Files, то эта папка будет доступна только для чтения обычным пользователям. Пользователи никогда не смогут обновить приложение, если у них нет прав администратора на компьютере.

Вам следует написать отдельное приложение, которое проверяет версию установленного приложения на соответствие версии сервера. Если установленная версия нуждается в обновлении, загрузите новые файлы и поместите их в папку, в которую пользователи могут писать, например в папку под C:\ProgramData, или CommonApplicationData при использовании среды.GetFolderPath().

Если установленная версия приложения соответствует тому, что доступно на сервере, просто запустите приложение из папки, в которую оно установлено выше.


Maciej Los

Вот оно! Я хотел сказать то же самое!
5ed!

Рейтинг:
20

Graeme_Grant

В качестве альтернативы, ClickOnce[^] это еще один вариант и снимает с вас всю тяжелую работу. Я написал обертку, чтобы сделать использование ClickOnce намного проще... Вы можете найти его здесь: Бесшумный установщик ClickOnce для Winform & WPF в C# & VB[^]


Рейтинг:
1

Member 14065947

Спасибо вам всем! Вы действительно очень помогли мне и добились успеха! :)


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" под этим решением. НЕ опубликуйте свой комментарий как новое "решение".

Если одно или несколько решений помогли вам решить вашу проблему, то вы должны нажать кнопку, чтобы принять их. Таким образом, ваш вопрос будет помечен как "решенный".