• WPF开机启动时发生的异常


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

      用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也是关了又开,开了又关);费了这么大功夫,就只解决这么一处小错误,就像一个武功高手,使完一套九阴真经,又来一套降龙十八掌,最后靠一通王八拳解决战斗,相当没劲.

  • 相关阅读:
    26. Remove Duplicates from Sorted Array
    Luogu1879 [USACO06NOV]玉米田Corn Fields (状压DP)
    Luogu1655 小朋友的球 (组合数学,第二类斯特林数,高精)
    Luogu4408 [NOI2003]逃学的小孩 (树的直径)
    Luogu2574 XOR的艺术 (分块)
    Luogu3740 [HAOI2014]贴海报 (线段树)
    LuoguU72177 火星人plus (逆康拓展开)
    Luogu1919 【模板】A*B Problem升级版(FFT)
    Luogu5367 【模板】康托展开 (康拓展开)
    Luogu1088 火星人 (康托展开)
  • 原文地址:https://www.cnblogs.com/scheshan/p/2570059.html
Copyright © 2020-2023  润新知