WELL-E / AutoUpdater

WPF AutoUpdater

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

萌新问题

qq1176914912 opened this issue · comments

1、关于更新程序是否需要和主程序放在同一个目录下,是将主程序和更新程序的debug目录下的所有文件移动到同一文件夹下吗?
2、GeneralUpdate.PacketTool打包程序,我理解的第一个地址是需要打包的数据,第二行和第三行有啥区别?对打包数据有要求吗?
3、我可不可以直接用压缩工具做一个压缩包当做更新包?
4、现在的要对客户端更新是不是必须要有单独的更新程序、主程序、服务端三者,不能只有服务端和主程序,主程序中融合更新程序

1.是的
2.例如:你有两个版本v1.0.0.0 和 v1.1.1.1 ,第一个地址就写v1.0.0.0的文件夹路径 第二文本框里写 v1.1.1.1的文件夹路径 第三个文本框写你更新包最终要打包到哪个路径下。
3.可以,它的作用就是这个。
4.是的,三者才能组成一个更新体系。

5、流程图中说第一步主程序先去下载更新程序的更新包,我看项目中更新程序更新下载主程序时用的连接貌似和第一步是一样的,说明他们下载的东西是一样的,那会不会重复下载呢?
6、如果想要更新程序所用的下载地址和更新客户端的下载地址不同,是不是要在server中增加app.MapGet()和对应的方法?

我下载了您的这个源码 更改了AutoUpdate.MinimalService里面的下载路径为我的
image
image
也更改了主程序中的本地程序地址
image
也把更新程序AutoUpdate.Core中App.xaml.cs的死值改为了活值
image
将主程序和更新程序放到同一目录
image
启动主程序后点击按钮没有任何反应
image
是我漏掉哪里了吗?

5.不会重复瞎下载,那个是逐版本更新的包原始版本v1.0.0.0 , 新版本v1.0.0.1 v1.0.0.2 v1.0.0.3会下载这三个版本逐个更新
6.clientType来区分

我下载了您的这个源码 更改了AutoUpdate.MinimalService里面的下载路径为我的 image image 也更改了主程序中的本地程序地址 image 也把更新程序AutoUpdate.Core中App.xaml.cs的死值改为了活值 image 将主程序和更新程序放到同一目录 image 启动主程序后点击按钮没有任何反应 image 是我漏掉哪里了吗?

这个需要你自己调试一看看问题了,再把问题提交上来

image
这种不使用数据库的怎么结合clientType来区分更新程序的更新包和主程序的更新包

image
我现在将更新程序和主程序的版本都设置的比服务器包的版本高 前者是1.1.1.5 后者是1.1.1.2
image
为什么也下载下了呢,是没有版本比较的功能吗?

image 这种不使用数据库的怎么结合clientType来区分更新程序的更新包和主程序的更新包

我在TODO的那行注释里写了说明

image 我现在将更新程序和主程序的版本都设置的比服务器包的版本高 前者是1.1.1.5 后者是1.1.1.2 image 为什么也下载下了呢,是没有版本比较的功能吗?

比较功能有的,你需要在server端调试一下。整个链路都是跑通过的不会出现这种问题

image 我现在将更新程序和主程序的版本都设置的比服务器包的版本高 前者是1.1.1.5 后者是1.1.1.2 image 为什么也下载下了呢,是没有版本比较的功能吗?

比较功能有的,你需要在server端调试一下。整个链路都是跑通过的不会出现这种问题

哦哦这个需要自己写,我以为是内部就做了

image
我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

我现在尝试调试源码的主程序 又出现了这个错误
image
占用问题 我重启了电脑还是这样

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

我不是很清楚你现在的状况,按照我的经验给你提几个建议你看看:
1.检查一下项目的引用是否正常,如果引用多了的话其它的DLL正在使用就会出现占用的情况
2.进程是否正常关闭线程是否正常推出
3.更新包(.zip)里的文件内容是否重复,版本号信息必须不一样。MD5码要对上

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

我不是很清楚你现在的状况,按照我的经验给你提几个建议你看看: 1.检查一下项目的引用是否正常,如果引用多了的话其它的DLL正在使用就会出现占用的情况 2.进程是否正常关闭线程是否正常推出 3.更新包(.zip)里的文件内容是否重复,版本号信息必须不一样。MD5码要对上

关于第三点,多个更新包版本不一样,但是内容一样,也可能出现错误?
还有关于服务器配置下载路径的这里
image
第二个是时间这个时间是随便填吗,第五个的name是干什么用的 也可以随便填吗?

1.更新的意义就是把不同文件的更新统一,都一样了还更新啥呀。
2.时间戳有先后时序的
3.那个name是更新包的名称也要不一样

1.更新的意义就是把不同文件的更新统一,都一样了还更新啥呀。 2.时间戳有先后时序的 3.那个name是更新包的名称也要不一样

3、这个名字不同主程序的更新包和主程序的更新包之间、更新助手的更新包和更新助手的更新包之间肯定是不能相同,那主程序的更新包和更新助手的更新包可以相同吗

1.更新的意义就是把不同文件的更新统一,都一样了还更新啥呀。 2.时间戳有先后时序的 3.那个name是更新包的名称也要不一样

3、这个名字不同主程序的更新包和主程序的更新包之间、更新助手的更新包和更新助手的更新包之间肯定是不能相同,那主程序的更新包和更新助手的更新包可以相同吗

建议不同,不然时间长了你自己都分不清楚、也能方便你自己排查问题到底是哪个包更新出错了。

2、先后时序会影响后面解压更新时版本的顺序吗,例如1.1.1.1的版本的更新包,我写时间是2021年xxx,而1.1.1.2版本的更新包的时间我写2020年xxx,也就是新版本的时间比旧版本的时间还早,这么写会不会有影响,还是说1.1.1.2的更新包的时间必须要比1.1.1.1的更新包的时间晚,如果这样 我是不是可以把他理解为更新包的创建时间

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

我不是很清楚你现在的状况,按照我的经验给你提几个建议你看看: 1.检查一下项目的引用是否正常,如果引用多了的话其它的DLL正在使用就会出现占用的情况 2.进程是否正常关闭线程是否正常推出 3.更新包(.zip)里的文件内容是否重复,版本号信息必须不一样。MD5码要对上

关于这个问题,我重新弄了一次,这次两个更新包中的内容不一样,但是还是不行,您想一想您代码里 是不是下载的时候要创建C:\Users\用户\AppData\Local\Temp\generalupdate_2022-04-09_patchs"这个文件夹,我调试发现当要解压第二个安装包时到达如图所示的地方,这个目录时不存在的,所以就抛出了目标地址不存在的错误
image

我看客户端设置的时候还有一个请求验证更新的服务端地址
image
对应服务端的这两个方法
image
这个图中UpdateVersionDTO总的参数有什么说法 GetLastVersion()中的版本有啥说法?

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

我不是很清楚你现在的状况,按照我的经验给你提几个建议你看看: 1.检查一下项目的引用是否正常,如果引用多了的话其它的DLL正在使用就会出现占用的情况 2.进程是否正常关闭线程是否正常推出 3.更新包(.zip)里的文件内容是否重复,版本号信息必须不一样。MD5码要对上

关于这个问题,我重新弄了一次,这次两个更新包中的内容不一样,但是还是不行,您想一想您代码里 是不是下载的时候要创建C:\Users\用户\AppData\Local\Temp\generalupdate_2022-04-09_patchs"这个文件夹,我调试发现当要解压第二个安装包时到达如图所示的地方,这个目录时不存在的,所以就抛出了目标地址不存在的错误 image

它会自动生成这个路径,找到是少配置路径了。你把引导类的启动配置发出来看看

image 我现在将服务器上的文件更改为了两个 主程序启动后下载完了两个 没有关闭主程序打开更新程序,我看了文件夹也只是吧第一个下载的压缩包解压了,第二个没有解压,但是只留一个文件(留那个都行),又能正常打开更新程序更新,就改成两个文件后不能打开更新程序,好迷茫,您代码是从哪里去启动的更新程序,我想看看毛病出在哪里

这个需要检查路径怎么配置的
因为遇到了占用问题,我就把占用的这句代码注释掉了
image
然后我调试找了一下 在下图中 当第二个压缩包到达时 解压过程中会报一个目标文件夹不存在的错误
image

我不是很清楚你现在的状况,按照我的经验给你提几个建议你看看: 1.检查一下项目的引用是否正常,如果引用多了的话其它的DLL正在使用就会出现占用的情况 2.进程是否正常关闭线程是否正常推出 3.更新包(.zip)里的文件内容是否重复,版本号信息必须不一样。MD5码要对上

关于这个问题,我重新弄了一次,这次两个更新包中的内容不一样,但是还是不行,您想一想您代码里 是不是下载的时候要创建C:\Users\用户\AppData\Local\Temp\generalupdate_2022-04-09_patchs"这个文件夹,我调试发现当要解压第二个安装包时到达如图所示的地方,这个目录时不存在的,所以就抛出了目标地址不存在的错误 image

它会自动生成这个路径,找到是少配置路径了。你把引导类的启动配置发出来看看

不好意思,有点听不懂引导类的启动配置是哪个 0.0

bootstrap的哪个类里面的config

我看客户端设置的时候还有一个请求验证更新的服务端地址 image 对应服务端的这两个方法 image 这个图中UpdateVersionDTO总的参数有什么说法 GetLastVersion()中的版本有啥说法?

库里查出最新版本

bootstrap的哪个类里面的config

image
这是我搜到的bootstrap的相关东西,你指的是哪个,我是用的您的这个github里面的源码的项目

请问您现在这个是不是不支持文件夹的更新,我发现他是把文件夹的内容拿出来都放到一页上了

bootstrap的哪个类里面的config

image 这是我搜到的bootstrap的相关东西,你指的是哪个,我是用的您的这个github里面的源码的项目

哎,有些基础的东西还是要自己看一眼。不能啥细节都问,Generaludpatebootstrap里你创建的时候不是配置了一个config方法吗。配置在那个里面

bootstrap的哪个类里面的config

image 这是我搜到的bootstrap的相关东西,你指的是哪个,我是用的您的这个github里面的源码的项目

哎,有些基础的东西还是要自己看一眼。不能啥细节都问,Generaludpatebootstrap里你创建的时候不是配置了一个config方法吗。配置在那个里面

好吧,主要是我没创建,我直接用的是您的这个git上的项目,我想先试一试,可能是您在开发新功能的时候改了,我这也不了解,所以不能用吧

请问您现在这个是不是不支持文件夹的更新,我发现他是把文件夹的内容拿出来都放到一页上了

这个更新原理是把安装包的结构覆盖掉你主程序的结构,所以更新包的结构要和主程序的结构一致这样就能完全覆盖了。

config这个方法一直存在于这个组件里

我这几天准备出一套使用视频,完全能跑起来使用的教学。关注下b站的账号就行名字和我github的一样

请问您现在这个是不是不支持文件夹的更新,我发现他是把文件夹的内容拿出来都放到一页上了

这个更新原理是把安装包的结构覆盖掉你主程序的结构,所以更新包的结构要和主程序的结构一致这样就能完全覆盖了。

那大致意思就是说 假如我想更新主程序的某个目录,这个目录首先一定要存在,如果不存在,他就会把更新目录下的这个文件夹里的文件都放到根目录,而不会自动创建这个目录

请问您现在这个是不是不支持文件夹的更新,我发现他是把文件夹的内容拿出来都放到一页上了

这个更新原理是把安装包的结构覆盖掉你主程序的结构,所以更新包的结构要和主程序的结构一致这样就能完全覆盖了。

那大致意思就是说 假如我想更新主程序的某个目录,这个目录首先一定要存在,如果不存在,他就会把更新目录下的这个文件夹里的文件都放到根目录,而不会自动创建这个目录

嗯,程序是不知道你会新增目录的。如果不在更新包里把结构指定清楚它会把那些默认放到第一级目录下

我这几天准备出一套使用视频,完全能跑起来使用的教学。关注下b站的账号就行名字和我github的一样

好的,麻烦大佬了,感谢大佬的耐心解释,问了这么多问题,万分感谢

还有一个问题大佬,就是之前说的那个先后时序
image
会影响后面解压更新时版本的顺序吗,例如1.1.1.1的版本的更新包,我写时间是2021年xxx,而1.1.1.2版本的更新包的时间我写2020年xxx,也就是新版本的时间比旧版本的时间还早,这么写会不会有影响,还是说1.1.1.2的更新包的时间必须要比1.1.1.1的更新包的时间晚,如果这样 我是不是可以把他理解为更新包的创建时间

还有一个问题大佬,就是之前说的那个先后时序 image 会影响后面解压更新时版本的顺序吗,例如1.1.1.1的版本的更新包,我写时间是2021年xxx,而1.1.1.2版本的更新包的时间我写2020年xxx,也就是新版本的时间比旧版本的时间还早,这么写会不会有影响,还是说1.1.1.2的更新包的时间必须要比1.1.1.1的更新包的时间晚,如果这样 我是不是可以把他理解为更新包的创建时间

正常发布流程就不会有新版本时间比老版本早的,组件里会按照发布时间排序进行解压

我是了一下,我现在想在我主程序的某个目录下增加几个证书.cer文件 更新包路径是up2/cer
image
主程序目录下有这个目录
image
但是更新后依然放到了根目录,我调试发现,然后我怕是因为不能添加的原因,又增加了一个证书,想让更新包的证书替换他,但还是没有成功,依然放到了根目录

我还是等您的过几天的最新视频和代码吧 感谢

新问题:如果我在服务端进行了版本的验证,第一部检查更新助手的时候,假如我的更新助手不需要更新或者说服务器版本比实际版本低,我要怎么返回参数,才能让他正常进入第三部去打开更新助手程序,检查主程序是否需要更新,我这里写的,如果没有或者版本不对,返回一个空的 回去,但是并不能进入第三部,打开更新助手去检查主程序这个过程
image
我调试代码发现貌似是只要第一部检查更新助手,或者说是下载更新助手过程中出错,后面不会进入主程序的检查和更新。如果成功打开了更新助手,对主程序的更新包的下载过程中,我把服务器关了,模拟下载失败的情况,更新助手会一直停在屏幕上,文件是否执行了回滚,不知道大佬考没考虑到这个问题

这个需要重新走一遍下载流程然后会启动断点续传,理论上的逻辑更新功能只许前进不许退。回滚就达不到更新的目的了

这个需要重新走一遍下载流程然后会启动断点续传,理论上的逻辑更新功能只许前进不许退。回滚就达不到更新的目的了

我在服务端进行了版本的验证,第一部检查更新助手的时候,假如我的更新助手不需要更新或者说服务器版本比实际版本低,我要怎么返回参数,才能让他正常进入第三部去打开更新助手程序,检查主程序是否需要更新,这里写的,如果没有或者版本不对,返回一个空的results回去,但是并不能进入第三部,打开更新助手去检查主程序这个过程,我也看了您的源码,貌似没有这样的一个处理
image

你回传的result是null还是只是一个空集合,如果空集合不能启动的话我这晚上看看

你回传的result是null还是只是一个空集合,如果空集合不能启动的话我这晚上看看

image
不是null 是new完之后的一个空集合

新问题:我把我主程序版本为1.1.1.3的debug目录下的文件压缩成了压缩包,当成1.1.1.3版本的更新包,然后上传到服务器,然后把本地版本改回1.1.1.2进行执行,当更新完成后,版本仍然但是1.1.1.2 只有当我将 本地的主程序exe名 改掉 启动更新 更新出来的新的exe才是最新版本,它并没有覆盖掉之前exe 。注:更新助手并没有这个问题,可以成功覆盖更新
image

你回传的result是null还是只是一个空集合,如果空集合不能启动的话我这晚上看看

image 不是null 是new完之后的一个空集合

这是个bug,已经修复了。你明天拉代码

新问题:我把我主程序版本为1.1.1.3的debug目录下的文件压缩成了压缩包,当成1.1.1.3版本的更新包,然后上传到服务器,然后把本地版本改回1.1.1.2进行执行,当更新完成后,版本仍然但是1.1.1.2 只有当我将 本地的主程序exe名 改掉 启动更新 更新出来的新的exe才是最新版本,它并没有覆盖掉之前exe 。注:更新助手并没有这个问题,可以成功覆盖更新 image

更新助手能正常更新,主程序应该也可以。用的都是同一套代码,可能是主程序没关闭或者占用了。需要调试一下

你回传的result是null还是只是一个空集合,如果空集合不能启动的话我这晚上看看

image 不是null 是new完之后的一个空集合

这是个bug,已经修复了。你明天拉代码

感谢大佬了,期待您新版本的nuget包

GeneralUpdate.ClientCore.2.4.7 已发布