随笔 - 18  文章 - 0 评论 - 376 阅读 - 10万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  纠结很久的一个问题,经过漫长的排查终于得到了解决.详细情景是这样的:

  用WPF做了2个程序A和B,其中A是主程序,B是升级程序.A首先运行,在窗口加载前会连接服务器判断是否有新版本,如果有新版本则先下载服务器端的B程序并覆盖掉本地的B,然后再运行B程序.这样的流程是为了实现升级程序的自更新,一直也运行正常,没什么好说的.

  问题出现在有些用户将A程序设置成开机启动后,第一次运行总会出现应用程序崩溃,崩溃是出现在B运行的时候.我在本地尝试后也是出现此情况.如果A程序不需要更新,那么是无需运行B的,但是B每次都会运行.

幸好点击"调试程序"后,还能用VS进入调试,发现的问题是启动了B程序,而B程序报了异常"无法加载程序集XXXX",但是该程序集的确是在应用程序目录下.把该程序集扔到GAC就没问题了,此时可以断定应用程序路径一定出现了问题.

排查代码,发现从服务器下载B程序是直接用的相对路径WebClient.DownloadFile("http://.....", "B.exe");而这里下载的文件跑到windows/system32文件夹下面去了.下载完毕后启动B程序也是用的Process.Start("B.exe"),也跑去启动了windows/system32文件夹下的文件.知道问题所在就简单了,这里加上System.Enviroment.CurrentDirectory或者Process.GetCurrentProcess().MainModule.FileName作为当前文件夹限定,就解决了.

问题分析出来很简单,可是解决过程还是多坎坷的.问题只出现在刚开机的那一次启动,意味着我得频繁的注销登录用户(VS也是关了又开,开了又关);费了这么大功夫,就只解决这么一处小错误,就像一个武功高手,使完一套九阴真经,又来一套降龙十八掌,最后靠一通王八拳解决战斗,相当没劲.

posted on   烟灰灰  阅读(1095)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示