Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何覆盖更新过程中的文件_Vb.net_Updates_Auto Update - Fatal编程技术网

Vb.net 如何覆盖更新过程中的文件

Vb.net 如何覆盖更新过程中的文件,vb.net,updates,auto-update,Vb.net,Updates,Auto Update,我正在尝试在VB.NET中为我的应用程序创建更新程序,不,我不想使用clickonce,它很糟糕,因为我必须处理管理自签名证书等问题 我知道检查新更新文件的代码: 我还知道用于指定这些文件下载到何处的代码,问题是我不想只下载1.exe…我想下载所有最新的构建文件,这些文件本应上载到我的服务器,这些文件本应取自我项目的Bin\release文件夹 然后,当更新程序将文件下载到某个目录时,它将转到应用程序的目录,并以某种方式覆盖/替换所有已更改的文件…可能是使用哈希或其他方法 我不知道如何进行这项

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

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

我还知道用于指定这些文件下载到何处的代码,问题是我不想只下载1.exe…我想下载所有最新的构建文件,这些文件本应上载到我的服务器,这些文件本应取自我项目的Bin\release文件夹

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

我不知道如何进行这项工作。我只知道这个

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


非常感谢大家的帮助。

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

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

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

  • 我还没有尝试过这个场景,因为目前我的重点是完成主应用程序,但这肯定是可行的

    更新:

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

    用于复制/覆盖文件

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

    构建了一个附带守护进程的更新程序。主要项目如下:


    应该有一种方法可以消除守护进程的使用,如果我找到了,我会更新它

    嗯,因为你认为你在使用自签名证书时遇到了问题,所以你要自己重新编写所有这些?您对证书有哪些具体问题?让我们忘记单击一次。如果你能在我问的问题上帮我的忙,那就太好了。你的问题到底是什么?如果更新程序知道应用程序的安装位置,并且在某些情况下正在运行,那么它应该能够替换文件overwriting@UriahsVictor您可以循环处理下载文件的目录/文件夹,并将所有文件复制到应用程序的Bin文件夹。有关更多详细信息,请参阅@UriahsVictor。或者,您也可以在下载中使用包含rega信息的特定文本文件