如何覆盖文件以进行更新过程

时间:2015-10-10 18:10:31

标签: vb.net updates auto-update

我试图在VB.NET中为我的应用创建更新程序,不,我不想使用clickonce,它很糟糕,因为我必须处理自我签名的证书等。

我知道要检查新更新文件的代码:

http://pastebin.com/ZjYBWABu

我也知道用于指定这些文件下载位置的代码,问题是我不想只下载1 .exe ...我想下载所有最新的构建文件,我将上传到我的服务器,我会从我项目的Bin \ release文件夹中删除。

然后当updater将文件下载到目录时,它将转到应用程序的目录,并以某种方式覆盖/替换所有已更改的文件...可能使用哈希或其他东西?

我不知道如何处理这个问题。我所知道的就是这个。

更新程序和主应用程序必须是分开的,以便更新程序可以在应用程序关闭时进行替换,这样它就不会出现文件使用错误。更新程序应用程序完成后,它将从新的exe启动主应用程序。

非常感谢帮助,谢谢你们。

2 个答案:

答案 0 :(得分:0)

我目前正在开展一个项目,我必须实施类似的更新方法。该项目很长,需要一些时间才能完成。但这就是我计划应用更新的方式:

  1. 应用程序将有两个主要部分启动器(主应用程序)和更新程序(从服务器下载文件并将其替换为新文件,然后启动新文件)
  2. 应用程序可以选择手动检查更新,还可以在启动时检查更新。
  3. 如果有可用更新,则会要求用户立即或稍后应用更新。
  4. 如果用户现在选择应用更新,则更新程序应用程序在单独的进程中执行,然后启动器应用程序从Launcher中的代码中关闭。我在脑海中有以下方法从第一个程序中启动另一个程序然后退出:
    • 使用Process.Start
    • 直接从Launcher中执行Updater
    • 如果这会导致问题,那么作为Process.Start的第二个方法启动命令提示符,从命令提示符执行另一个程序(Updater),关闭命令提示符,然后退出启动器。
  5. 然后,更新程序应用程序从服务器下载所有相关文件,并在完成旧应用程序文件替换时使用新文件。

    • 从服务器更新可用性信息将包括新的Version_No应用程序。为了提供所有要更新的文件,我将压缩(zip)所有这些文件,名为Application.Version_No(由服务器提供)。
    • 下载完成后,将它们解压缩(解压缩)到名为Application.Version_No的文件夹中。
    • 解压缩后,此(Application.Version_No)文件夹中的所有文件将被复制到应用程序的Bin文件夹中。
  6. 新应用启动器文件在单独的流程中执行更新程序应用程序已关闭来自Updater中的代码。

  7. 我还没有尝试过这个场景,因为目前我的重点是完成主应用程序,但肯定这一点必须有效。

    更新:

    检查更新的另一种方法是使用引导程序,如应用程序启动。它将是该计划的主要切入点。在执行时它将检查更新,如果没有执行Launcher,否则它将下载文件,替换旧文件,然后执行新的/更新的启动器。

    用于复制/覆盖文件

    • 一种方法是仅包含压缩(zip)文件中需要用旧文件替换的文件,然后在下载完成后直接将它们解压缩到Bin文件夹或将它们解压缩到指定的文件夹然后将它们全部复制到Bin文件夹。
    • 作为另一种似乎有点冗长的方法,可以为下载准备一个额外的帮助文件(XML,文本或任何其他格式)。
      • 此帮助文件包含更新文件的信息,例如每个文件的版本号,要复制这些文件的位置等。
      • 可以将文件下载到名为新应用程序版本的特定文件夹中。
      • 将所有必需文件下载到特定文件夹后,处理帮助文件中提到的每个文件。将每个旧文件的版本与新下载的文件进行比较。如果是最新的,则将其替换为帮助文件中提到的文件夹。
      • 在复制和替换之前,可以验证所有下载之间的另一个步骤。

答案 1 :(得分:0)

构建一个随守护程序一起提供的更新程序。主要项目在这里:

https://github.com/UVLabs/dotNetUpdatify

应该有一种方法来消除守护进程的使用,如果我弄明白我会更新。