我试图在VB中为我的应用程序创建一个更新程序。不,我不想使用clickonce,它很糟糕,因为我必须处理管理自签名证书等。
我知道检查新更新文件的代码:
http://pastebin.com/ZjYBWABu我也知道代码用于指定这些文件下载到哪里,问题是我不想只是下载1 .exe…我想下载所有最新的构建文件,我将上传到我的服务器,我将从我的Bin发布文件夹我的项目。
然后当更新程序将文件下载到一个目录时,它将进入应用程序的目录,并以某种方式覆盖/替换所有已更改的文件…也许用散列之类的?
我不知道该怎么做。我所知道的是:
更新程序和主应用程序必须分开,以便更新程序可以在应用程序关闭时进行替换,这样它就不会得到文件使用错误。更新应用程序完成后,它将从新的exe启动主应用程序。
非常感谢大家的帮助。
我目前正在一个项目上工作,我必须为更新实现类似的方法。这个项目很长,需要一些时间才能完成。但这是我计划应用更新的方式:
- 应用程序将有两个主要部分Launcher(主应用程序)和Updater(从服务器下载文件并用新文件替换它们,然后启动新文件)
- 应用程序将有手动检查更新的选项,也可以在启动时检查更新。
- 如果有可用的更新,则要求用户立即或稍后应用更新。
- 如果用户选择现在应用更新,那么Updater应用程序将在单独的进程中执行,然后Launcher应用程序将从Launcher中的代码中关闭。在我的脑海中有以下方法从第一个程序中启动另一个程序,然后退出:
- 在启动器中使用进程直接执行更新程序。开始
- 如果这导致问题,那么作为第二种方法从进程启动命令提示符。从命令提示符启动,执行另一个程序(Updater),关闭命令提示符,然后退出启动器。
-
Updater应用程序然后从服务器下载所有相关文件,完成后旧的应用程序文件被替换为新的。
- 从服务器更新可用性信息将包括新的应用程序Version_No。为了提供所有要更新的文件,我将压缩(zip)它们到一个名为Application的文件中。Version_No(由服务器提供).
- 下载完成后,将它们解压缩(解压缩)到名为Application.Version_No. 的文件夹中。
- 解压后,此(application. version_no)文件夹中的所有文件将被复制到应用程序的Bin文件夹中。
-
新的应用程序Launcher文件在一个单独的进程中执行,Updater应用程序从Updater中的代码中关闭。
我还没有尝试过这个场景,因为目前我的重点是完成主要的应用程序,但肯定这必须工作。
更新:
另一种检查更新的方法是使用引导,如应用程序启动。这将是该计划的主要切入点。在执行时,它将检查是否有更新,如果没有,则执行启动程序,否则它将下载文件,替换旧的文件,然后执行新的/更新的启动程序。用于复制/覆盖文件
- 一种方法是只包括那些压缩(zip)文件中需要替换旧的文件,然后在下载完成后,要么直接解压缩到Bin文件夹,要么解压缩到指定的文件夹,然后将它们全部复制到Bin文件夹。
- 作为另一种似乎有些冗长的方法,可以准备一个额外的帮助文件(XML、文本或任何其他格式)以供下载。
- 此辅助文件包含更新文件的信息,如每个文件的版本号,这些文件的复制位置等。
- 文件可以下载到指定的文件夹,命名为新的应用程序版本。
- 将所有必需的文件下载到特定文件夹后,处理helper文件中提到的每个文件。比较每个旧文件的版本与新下载的文件。如果是最新的,则将其替换到helper文件中提到的文件夹中。
- 作为所有下载之间的另一个步骤,可以在复制和替换之前进行验证。
构建一个与守护进程一起发布的更新程序。这里的主项目:
https://github.com/UVLabs/dotNetUpdatify应该有一种方法来消除守护进程的使用,如果我发现它,我将更新。